我需要產生將輸出類似的查詢:選擇基於字段值多行
NAME GRADE SUBJECT
Smith, Shirley 3 ELA
Smith, Shirley 3 M
Jones, John 5 ELA
Jones, John 5 M
Jones, John 5 SCI
如果學生在5年級,8,或11,查詢應該產生3行數據每名學生。等級3,4,6,7,9,10和12應該只產生兩行數據。
我嘗試過使用聯合三個case語句的UNION ALL方法,但是這會給出'Missing Select keyword'錯誤。如果我從第一個UNION ALL和它下面的所有東西中刪除所有內容,查詢的頂部就可以正常工作。
什麼是更好的方法呢?
CASE
WHEN s.grade_level IN (3,4,5,6,7,8,9,10,11,12) THEN
SELECT
s.lastfirst as NAME,
s.grade_level as GRADE,
'ELA' as SUBJECT
END
FROM students s
UNION ALL
CASE
WHEN s.grade_level IN (3,4,5,6,7,8,9,10,11,12) THEN
SELECT
s.lastfirst as NAME,
s.grade_level as GRADE,
'M' as SUBJECT
END
FROM students s
UNION ALL
CASE
WHEN s.grade_level IN (5,8,11) THEN
SELECT
s.lastfirst as NAME,
s.grade_level as GRADE,
'SCI' as SUBJECT
END
FROM students s
很棒的sql - 謝謝。我不得不稍微修改它,cteGrades AS語句生成「ORA-32039:遞歸WITH子句必須有列別名列表」,我用cteGrades(grade_level)AS解決了這個問題(...我同意Throsten的答案是首選,但我們並不總是在處理數據庫,我們可以編輯模式,就像我的情況一樣,我需要找到一個基於SQL的解決方案,而不是建議如何更改我的數據庫,Matt的解決方案效果很好。 –