Con più domande
Query complessa.

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
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