Esiste un modo "migliore" per riscrivere una SELECT
clausola in cui più colonne utilizzano le stesse CASE WHEN
condizioni in modo che le condizioni vengano verificate una sola volta?
Vedi l'esempio sotto.
SELECT
CASE testStatus
WHEN 'A' THEN 'Authorized'
WHEN 'C' THEN 'Completed'
WHEN 'P' THEN 'In Progress'
WHEN 'X' THEN 'Cancelled'
END AS Status,
CASE testStatus
WHEN 'A' THEN authTime
WHEN 'C' THEN cmplTime
WHEN 'P' THEN strtTime
WHEN 'X' THEN cancTime
END AS lastEventTime,
CASE testStatus
WHEN 'A' THEN authBy
WHEN 'C' THEN cmplBy
WHEN 'P' THEN strtBy
WHEN 'X' THEN cancBy
END AS lastEventUser
FROM test
In psuedo-code non sql, il codice potrebbe apparire come:
CASE testStatus
WHEN 'A'
StatusCol = 'Authorized'
lastEventTimeCol = authTime
lastEventUserCol = authUser
WHEN 'C'
StatusCol = 'Completed'
lastEventTimeCol = cmplTime
lastEventUserCol = cmplUser
...
END
Nota:
- Sono a conoscenza degli ovvi problemi di normalizzazione implicati dalla query. Volevo solo dimostrare il problema.
authTime
,authUser
,cmplTime
sono nella stessa tabella?