มีวิธี "ดีกว่า" ในการเขียน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
อยู่ในโต๊ะเดียวกันได้หรือไม่