【发布时间】:2021-12-27 00:53:11
【问题描述】:
我想从两个状态中选择 2 列
ORDER_NUMBER | STATUS | DATE
--------+-----------+--------------
001 | submit | 2021-08-31
113 | submit | 2021-09-01
113 | approve | 2021-09-03
001 | cancel | 2021-09-02
112 | submit | 2021-09-01
112 | cancel | 2021-09-10
112 | resubmit | 2021-09-13
112 | approve | 2021-09-15
预期结果:
ORDER_NUMBER | APPROVE_DATE | CANCEL_DATE
-------------+--------------+--------------
001 | null | 2021-09-02
112 | 2021-09-15 | 2021-09-10
113 | 2021-09-03 | null
我的代码:
SELECT ORDER_NUMBER,
CASE WHEN STATUS = 'approve' THEN DATE END AS APPROVE_DATE,
CASE WHEN STATUS = 'cancel' THEN DATE END AS CANCEL_DATE
FROM
TABLE
但它显示的结果
ORDER_NUMBER | APPROVE_DATE | CANCEL_DATE
-------------+--------------+--------------
001 | null | null
001 | null | 2021-09-02
112 | null | null
112 | null | 2021-09-10
112 | null | null
112 | 2021-09-15 | null
113 | null | null
113 | 2021-09-03 | null
显示重复的 ORDER NUMBER 没有我的目标状态,我该如何解决?
【问题讨论】:
-
请标记正确的dbms
-
为什么选择这些对?例如,您在取消日期 2021-09-04 旁边显示批准日期 2021-08-31。为什么?它们有某种关联吗?在 SQL 中,您在一行中显示属于一起的数据。我看不出特定的批准和取消日期对是如何相关的。
-
你需要解释你的逻辑