【问题标题】:DB2 SQL - Difference (minus) of CASE WHENDB2 SQL - CASE WHEN 的差异(减号)
【发布时间】:2017-12-13 17:05:14
【问题描述】:

我正在尝试在 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 中的状态为“pickd”,则从最新日期(在同一 col CHANGED 中)减去最旧的日期(在 col.CHANGED 中) /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 语句的所需结果将是 最大值 = 2017 年 12 月 10 日 最小值 = 2017 年 12 月 1 日

所以 (12/10/2017 - 12/1/2017) 等于 9
9 是我想要的返回值

我们将不胜感激。
谢谢你的时间

【问题讨论】:

  • 编辑您的问题并提供示例数据和所需的结果。您的非工作 SQL 代码实际上没有意义。

标签: sql db2 difference case-when


【解决方案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;

【讨论】:

  • 谢谢你,戈登,工作就像一个魅力!我仍然为那些可能需要类似内容的人编辑了我的问题。祝你有美好的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 2017-05-30
  • 1970-01-01
相关资源
最近更新 更多