Có cách nào "tốt hơn" để viết lại một SELECT
mệnh đề trong đó nhiều cột sử dụng cùng một CASE WHEN
điều kiện để các điều kiện chỉ được kiểm tra một lần không?
Xem ví dụ dưới đây.
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
Trong mã psuedo không phải sql, mã có thể trông như sau:
CASE testStatus
WHEN 'A'
StatusCol = 'Authorized'
lastEventTimeCol = authTime
lastEventUserCol = authUser
WHEN 'C'
StatusCol = 'Completed'
lastEventTimeCol = cmplTime
lastEventUserCol = cmplUser
...
END
Ghi chú:
- Tôi nhận thức được các vấn đề bình thường hóa rõ ràng ngụ ý bởi truy vấn. Tôi chỉ muốn chứng minh vấn đề.
authTime
,authUser
,cmplTime
đang ở trong cùng một bảng?