Oracle
SQL case 語句未執行“else”
我在 Oracle 12.1.0.2.0 上我有一個使用 CASE 語句編寫的查詢。我有 2 個“WHEN”語句和一個“ELSE”語句。除“ELSE”語句外,查詢按預期工作。我沒有收到任何語法錯誤,只是在應該的情況下沒有達到“ELSE”大小寫,而是什麼也不返回。
SELECT CASE WHEN COUNT(COLUMN_A) = 1 THEN 'PASS' WHEN COUNT(COLUMN_A) > 1 THEN 'FAIL' ELSE 'DOES NOT EXIST' END AS TEST, SCH.COLUMN_A FROM SCHEMA.TABLE_A SCH WHERE SCH.COLUMN_A = 'NA' GROUP BY COLUMN_A
當我執行此查詢時(在我的理解中是 else 情況),它會返回 0,因為它應該:
SELECT COUNT(COLUMN_A) < 1 FROM SCHEMA.TABLE_A SCH WHERE SCH.COLUMN_A = 'NA'
如果您需要提供表結構,請告訴我,但它相當簡單。
我究竟做錯了什麼?為什麼當查詢返回 0 時,else 語句沒有返回“DOES NOT EXIST”?我有一種感覺,這很簡單,但我被卡住了,需要一些幫助。我很感激。
你使用了這個謂詞:
COLUMN_A = 'NA'
COUNT(COLUMN_A)
僅當您有 0 行 whereCOLUMN_A = 'NA'
(因為謂詞而排除空值)時,結果才能為 0。如果您有 0 行,CASE
則根本不評估該語句,並且上述查詢不返回任何結果。即使沒有行與您的謂詞匹配,您也需要一個返回結果的查詢。例如:
SELECT CASE WHEN C = 1 THEN 'PASS' WHEN C > 1 THEN 'FAIL' ELSE 'DOES NOT EXIST', 'NA' FROM ( SELECT COUNT(*) AS C FROM SCHEMA.TABLE_A SCH WHERE SCH.COLUMN_A = 'NA' );
如果沒有 COLUMN_A = ‘NA’ 的記錄,則輸出中將沒有記錄。
使用類似的東西
SELECT CASE WHEN COUNT(SCH.COLUMN_A) = 1 THEN 'PASS' WHEN COUNT(SCH.COLUMN_A) > 1 THEN 'FAIL' ELSE 'DOES NOT EXIST' END AS TEST, SCH.COLUMN_A FROM (SELECT 'NA' COLUMN_A) dummy LEFT JOIN SCHEMA.TABLE_A SCH ON SCH.COLUMN_A = dummy.COLUMN_A /* GROUP BY SCH.COLUMN_A */