2017-12-13 12 views
1

次のようにDB2環境でとき、私は2ケースとの違いをやろうとしていますWHEN:DB2のSQL - CASEの差(マイナス)

select DISTINCT 
TLORDER.BILL_NUMBER, 
TLORDER.XCHARGES, 
TLORDER.CHARGES, 
TLORDER.DISTANCE, 
TLORDER.CREATED_TIME, 
TLORDER.DESTCITY, 
(CASE WHEN ODRSTAT.STATUS = '5ARRCONS' THEN MAX(ORDSTAT.CHANGED) 
END - 
CASE WHEN ODRSTAT.STATUS = 'PICKD' THEN MIN(ODRSTAT.CHANGED) 
END) AS DETENTION 
FROM ODRSTAT 
LEFT JOIN TLORDER ON ODRSTAT.ORDER_ID = TLORDER.DETAIL_LINE_ID 

私は様々なオンラインを使用して、この概念のいくつかのバリエーションを試してみました同じ列を使用した場合の差異ではなく、合計に対する多くの回答が見つかりました。

目標は、Col. STATUSのステータスが '5arrcons'の場合​​、Col. Statusのステータスが最新の日付(picked)から(同じ列のCHANGED内) 'pickd'である場合に、最も古い日付 MAX = 2017年12月10日 分= 2017年12月1日

ので(だろう。この場合、CASE文から、希望の結果を

Key ORDER_ID STATUS  CHANGED 
1 10   5ARRCONS 12/10/2017 
2 10   OTHER  12/10/2017 
3 10   PICKD  12/5/2017 
4 10   OTHER  12/3/2017 
5 10   PICKD  12/1/2017 

は、次のデータセットを考えてみましょう12/10/2017 - 12/1/2017)は 9返されたものが私が望むものです

何かすべての援助をいただければ幸いです。
お時間をいただきありがとうございます

+0

あなたの質問を編集し、サンプルデータと希望する結果を提供してください。動作していないSQLコードは実際には意味をなさない。 –

答えて

1

欲しい旨を正確に伝えるのは難しいです。しかし、これはあなたが望むものかもしれません:

SELECT o.BILL_NUMBER, o.XCHARGES, o.CHARGES, o.DISTANCE, o.CREATED_TIME, o.DESTCITY, 
     (MAX(CASE WHEN os.STATUS = '5ARRCONS' THEN os.CHANGED END) - 
     MIN(CASE WHEN os.STATUS = 'PICKD' THEN os.CHANGED END) 
     ) AS DETENTION 
FROM ODRSTAT os JOIN 
    TLORDER o 
    ON os.ORDER_ID = o.DETAIL_LINE_ID 
GROUP BY o.BILL_NUMBER, o.XCHARGES, o.CHARGES, o.DISTANCE, o.CREATED_TIME, o.DESTCITY; 
+0

ありがとうゴードン、魅力のように動作します!私はまだ何か似ているかもしれない人のために私の質問を編集しました。すてきな一日を! – Jomathr