2015-09-18 59 views
0

我正在嘗試編寫一個子查詢來計算'TRACE_NO'的數量,如果只有一個實例我希望它顯示原始字符串。但是,如果它有多個'TRACE_NO'實例,我希望該行顯示'Duplicate'。我究竟做錯了什麼?返回基於行實例的查詢的SQL case語句

SELECT 
    SL.FILE_NO AS FILE, 
    (SELECT CASE(WHEN TR.TRACE_NO HAVING COUNT(*) >1 THEN 'DUPLICATE' ELSE 
TR.TRACE_NO) 
    FROM IASDB.TRACE_DETAIL TR 
    WHERE SL.INVOICE_NO = TR.INVOICE_NO 
     AND TR.TRACE_TYPE IN 'XX') AS XX 

FILE XX 
1120 | SEA 
1315 | SDF 
1251 | SEA 
1251 | GEG 
1991 | ATL 
1235 | BOI 
1235 | CVG 

所需的輸出:

FILE | XX 
1120 | SEA 
1315 | SDF 
1251 | DUPLICATE 
1991 | ATL 
1235 | DUPLICATE 
+0

你的外部查詢沒有'FROM'子句,'SL'未定義。 –

+0

這是定義SL的較大查詢的一部分。這只是一個片段。謝謝 –

回答

0

嘗試在包裹查詢你這樣的邏輯來實現這一點:

SELECT 
    FILE, 
    CASE 
    WHEN CNT = 1 THEN TRACE_NO 
    ELSE 'DUPLICATE' 
    END AS XX 
FROM (
    SELECT SL.FILE_NO AS FILE, TR.TRACE_NO, COUNT(*) as CNT 
    FROM IASDB.TRACE_DETAIL TR 
    GROUP BY SL.FILE_NO AS, TR.TRACE_NO 
) 
1

假設這是部分更大的查詢,這可能是你想要的邏輯:

SELECT SL.FILE_NO AS FILE, 
     (SELECT CASE WHEN COUNT(*) > 1 THEN 'DUPLICATE' ELSE MIN(TR.TRACE_NO) END 
     FROM IASDB.TRACE_DETAIL TR 
     WHERE SL.INVOICE_NO = TR.INVOICE_NO AND TR.TRACE_TYPE IN 'XX' 
     ) AS XX 
+0

是的,它是一個更大的查詢的一部分。我嘗試過,但它給了我這個錯誤 錯誤代碼:-104,SQL狀態:42601] DB2 SQL錯誤:SQLCODE = -104,SQLSTATE = 42601,SQLERRMC = *)> 1那麼'DUPLICATE'ELSE MIN(; ECT CASE(當COUNT(; ,DRIVER = 4.13.127.2)[錯誤代碼:-727,SQL狀態:56098] DB2 SQL錯誤:SQLCODE = -727,SQLSTATE = 56098,SQLERRMC = 2; -104; 42601; *)> 1 then'DUPLICATE'ELSE MIN(| ECT CASE(when count(|