Existe-t-il une "meilleure" façon de réécrire une SELECT
clause où plusieurs colonnes utilisent les mêmes CASE WHEN
conditions afin que les conditions ne soient vérifiées qu'une seule fois?
Voir l'exemple ci-dessous.
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
En code pseudo non SQL, le code pourrait ressembler à:
CASE testStatus
WHEN 'A'
StatusCol = 'Authorized'
lastEventTimeCol = authTime
lastEventUserCol = authUser
WHEN 'C'
StatusCol = 'Completed'
lastEventTimeCol = cmplTime
lastEventUserCol = cmplUser
...
END
Remarque:
- Je suis conscient des problèmes de normalisation évidents impliqués par la requête. Je voulais seulement démontrer le problème.
authTime
,authUser
,cmplTime
sont dans la même table?