Koşulların yalnızca bir kez kontrol edilmesi için SELECT
birden çok sütunun aynı CASE WHEN
koşulları kullandığı bir cümleyi yeniden yazmanın "daha iyi" bir yolu var mı ?
Aşağıdaki örneğe bakın.
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
Sql olmayan psuedo kodunda, kod şöyle görünebilir:
CASE testStatus
WHEN 'A'
StatusCol = 'Authorized'
lastEventTimeCol = authTime
lastEventUserCol = authUser
WHEN 'C'
StatusCol = 'Completed'
lastEventTimeCol = cmplTime
lastEventUserCol = cmplUser
...
END
Not:
- Sorgu tarafından ima edilen bariz normalizasyon sorunlarının farkındayım. Sadece sorunu göstermek istedim.
authTime
,authUser
,cmplTime
aynı tabloda mı?