none
Query complessa. RRS feed

  • Domanda

  • Ho questo codice:

    SELECT     CODEROGATORE, CODPRESTAZIONE, CODPRIORITA, DATARILEVAZIONE, DATAINS_AGENDA, N_PRENOTAZIONE, PRIMADATAPROSPETTATA, DATA,
                          Tipo
    FROM         TADett
    WHERE     (Tipo = 'RIC') AND (CODPRIORITA = 'CLASSE_A') AND (PRIMADATAPROSPETTATA IS NULL) AND (DATEDIFF(DAY, DATAINS_AGENDA, DATA) > 30)
    UNION ALL
    SELECT     CODEROGATORE, CODPRESTAZIONE, CODPRIORITA, DATARILEVAZIONE, DATAINS_AGENDA, N_PRENOTAZIONE, PRIMADATAPROSPETTATA, DATA,
                          Tipo
    FROM         TADett AS TADett_1
    WHERE     (Tipo = 'RIC') AND (CODPRIORITA = 'CLASSE_A') AND (PRIMADATAPROSPETTATA IS NOT NULL) AND (DATEDIFF(DAY, DATAINS_AGENDA,
                          PRIMADATAPROSPETTATA) > 30)
    UNION ALL
    SELECT     CODEROGATORE, CODPRESTAZIONE, CODPRIORITA, DATARILEVAZIONE, DATAINS_AGENDA, N_PRENOTAZIONE, PRIMADATAPROSPETTATA, DATA,
                          Tipo
    FROM         TADett AS TADett_2
    WHERE     (Tipo = 'RIC') AND (CODPRIORITA = 'CLASSE_B') AND (PRIMADATAPROSPETTATA IS NULL) AND (DATEDIFF(DAY, DATAINS_AGENDA, DATA) > 60)
    UNION ALL
    SELECT     CODEROGATORE, CODPRESTAZIONE, CODPRIORITA, DATARILEVAZIONE, DATAINS_AGENDA, N_PRENOTAZIONE, PRIMADATAPROSPETTATA, DATA,
                          Tipo
    FROM         TADett AS TADett_3
    WHERE     (Tipo = 'RIC') AND (CODPRIORITA = 'CLASSE_B') AND (PRIMADATAPROSPETTATA IS NOT NULL) AND (DATEDIFF(DAY, DATAINS_AGENDA,
                          PRIMADATAPROSPETTATA) > 60)
    UNION ALL
    SELECT     CODEROGATORE, CODPRESTAZIONE, CODPRIORITA, DATARILEVAZIONE, DATAINS_AGENDA, N_PRENOTAZIONE, PRIMADATAPROSPETTATA, DATA,
                          Tipo
    FROM         TADett AS TADett_4
    WHERE     (Tipo = 'RIC') AND (CODPRIORITA = 'CLASSE_C') AND (PRIMADATAPROSPETTATA IS NULL) AND (DATEDIFF(DAY, DATAINS_AGENDA, DATA) > 180)
    UNION ALL
    SELECT     CODEROGATORE, CODPRESTAZIONE, CODPRIORITA, DATARILEVAZIONE, DATAINS_AGENDA, N_PRENOTAZIONE, PRIMADATAPROSPETTATA, DATA,
                          Tipo
    FROM         TADett AS TADett_5
    WHERE     (Tipo = 'RIC') AND (CODPRIORITA = 'CLASSE_C') AND (PRIMADATAPROSPETTATA IS NOT NULL) AND (DATEDIFF(DAY, DATAINS_AGENDA,
                          PRIMADATAPROSPETTATA) > 180)
    UNION ALL
    SELECT     CODEROGATORE, CODPRESTAZIONE, CODPRIORITA, DATARILEVAZIONE, DATAINS_AGENDA, N_PRENOTAZIONE, PRIMADATAPROSPETTATA, DATA,
                          Tipo
    FROM         TADett AS TADett_6
    WHERE     (Tipo = 'RIC') AND (CODPRIORITA = 'CLASSE_D') AND (PRIMADATAPROSPETTATA IS NULL) AND (DATEDIFF(DAY, DATAINS_AGENDA, DATA) > 365)
    UNION ALL
    SELECT     CODEROGATORE, CODPRESTAZIONE, CODPRIORITA, DATARILEVAZIONE, DATAINS_AGENDA, N_PRENOTAZIONE, PRIMADATAPROSPETTATA, DATA,
                          Tipo
    FROM         TADett AS TADett_7
    WHERE     (Tipo = 'RIC') AND (CODPRIORITA = 'CLASSE_D') AND (PRIMADATAPROSPETTATA IS NOT NULL) AND (DATEDIFF(DAY, DATAINS_AGENDA,
                          PRIMADATAPROSPETTATA) > 365)

    che sono certo si possa migliorare ma, causa la mia scarsa conoscenza di SQL non sono riuscito a fare di meglio.

    Grazie e ciao

    Giovanni

    lunedì 8 luglio 2013 13:27

Tutte le risposte

  • Ciao,

    una soluzione potrebbe essere la soppressione delle clausole UNION ALL in favore dell'OR sulle condizioni. Infatti, dal momento che la tua selezione avviene sempre sulla medesima tabella, richiedendo gli stessi campi, la tua query può essere modificata in:

    SELECT  *
    FROM TADett
    WHERE (Tipo = 'RIC' AND CODPRIORITA = 'CLASSE_A' AND PRIMADATAPROSPETTATA IS NULL AND DATEDIFF(DAY, DATAINS_AGENDA, DATA) > 30) OR
          (Tipo = 'RIC' AND CODPRIORITA = 'CLASSE_A' AND PRIMADATAPROSPETTATA IS NOT NULL AND DATEDIFF(DAY, DATAINS_AGENDA, PRIMADATAPROSPETTATA) > 30) OR
          (Tipo = 'RIC' AND CODPRIORITA = 'CLASSE_B' AND PRIMADATAPROSPETTATA IS NULL AND DATEDIFF(DAY, DATAINS_AGENDA, DATA) > 60) OR
          (Tipo = 'RIC' AND CODPRIORITA = 'CLASSE_B' AND PRIMADATAPROSPETTATA IS NOT NULL AND DATEDIFF(DAY, DATAINS_AGENDA, PRIMADATAPROSPETTATA) > 60) OR
          (Tipo = 'RIC' AND CODPRIORITA = 'CLASSE_C' AND PRIMADATAPROSPETTATA IS NULL AND DATEDIFF(DAY, DATAINS_AGENDA, DATA) > 180) OR
          (Tipo = 'RIC' AND CODPRIORITA = 'CLASSE_C' AND PRIMADATAPROSPETTATA IS NOT NULL AND DATEDIFF(DAY, DATAINS_AGENDA, PRIMADATAPROSPETTATA) > 180) OR
          (Tipo = 'RIC' AND CODPRIORITA = 'CLASSE_D' AND PRIMADATAPROSPETTATA IS NULL AND DATEDIFF(DAY, DATAINS_AGENDA, DATA) > 365) OR
          (Tipo = 'RIC' AND CODPRIORITA = 'CLASSE_D' AND PRIMADATAPROSPETTATA IS NOT NULL AND DATEDIFF(DAY, DATAINS_AGENDA, PRIMADATAPROSPETTATA) > 365)
    Spero di esserti stato di aiuto

    martedì 23 luglio 2013 06:39