Чи існує "кращий" спосіб переписати SELECT
пункт, коли кілька стовпців використовують однакові CASE WHEN
умови, щоб умови перевірялися лише один раз?
Дивіться приклад нижче.
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
У psuedo-коді, який не є sql, код може виглядати так:
CASE testStatus
WHEN 'A'
StatusCol = 'Authorized'
lastEventTimeCol = authTime
lastEventUserCol = authUser
WHEN 'C'
StatusCol = 'Completed'
lastEventTimeCol = cmplTime
lastEventUserCol = cmplUser
...
END
Примітка:
- Мені відомо про очевидні проблеми нормалізації, які має на увазі запит. Я хотів лише продемонструвати проблему.
authTime
,authUser
,cmplTime
знаходяться в одній і тій же таблиці?