DB2 SQL - CASE WHEN的差异(减号)

时间:2017-12-13 17:05:15

标签: sql db2 difference case-when

我试图在DB2环境中做两种情况之间的区别如下:

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中的状态从最新日期(在相同的col CHANGED中)被“挑选”,则目标是减去最旧的日期(在col.CANGEDED中)。 / p>

考虑以下数据集:

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

在这种情况下,来自CASE语句的通缉结果将是 MAX = 12/10/2017 最低= 12/1/2017

所以(12/10/2017 - 12/1/2017)等于9
9是我想要的东西

任何和所有帮助将不胜感激 谢谢你的时间

1 个答案:

答案 0 :(得分: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;