DB2 SQL - CASE WHEN 的差(减)
DB2 SQL - Difference (minus) of 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 中的状态为 'pickd',则目标是从最新日期(在同一列 CHANGED 中)减去最旧日期(在 Col. CHANGED 中),如果 Col. STATUS 中的状态为'5arrcons'
考虑以下数据集:
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 语句的所需结果将是
最大值 = 12/10/2017
最小 = 12/1/2017
所以 (12/10/2017 - 12/1/2017) 等于 9
9 是我想要的返回值
我们将不胜感激。
谢谢你的时间
很难准确地说出你想要什么。但是,这可能就是您想要的:
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;
我正在尝试在 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 中的状态为 'pickd',则目标是从最新日期(在同一列 CHANGED 中)减去最旧日期(在 Col. CHANGED 中),如果 Col. STATUS 中的状态为'5arrcons'
考虑以下数据集:
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 语句的所需结果将是 最大值 = 12/10/2017 最小 = 12/1/2017
所以 (12/10/2017 - 12/1/2017) 等于 9
9 是我想要的返回值
我们将不胜感激。
谢谢你的时间
很难准确地说出你想要什么。但是,这可能就是您想要的:
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;