【发布时间】:2019-09-03 05:55:27
【问题描述】:
我有一个如下所示的数据集:
| Order | Step | Step_Complete_Date |
|:------:|:----:|:------------------:|
| ABC454 | 1 | 12/21/2018 |
| ABC454 | 2 | 12/22/2018 |
| ABC454 | 3 | NULL |
| ABC454 | 4 | 12/23/2018 |
| ABC454 | 5 | 12/23/2018 |
| ABC433 | 1 | 1/1/2019 |
| ABC433 | 2 | 1/1/2019 |
| ABC433 | 3 | 1/2/2019 |
| ABC433 | 4 | 1/3/2019 |
| ABC433 | 5 | 1/7/2019 |
| ABC600 | 1 | 2/1/2019 |
| ABC600 | 2 | 2/7/2019 |
| ABC600 | 3 | 3/1/2019 |
| ABC600 | 4 | NULL |
| ABC600 | 5 | NULL |
| ABC800 | 1 | 5/1/2019 |
| ABC800 | 2 | 5/5/2019 |
| ABC800 | 3 | 5/5/2019 |
| ABC800 | 4 | 5/5/2019 |
| ABC800 | 5 | NULL |
| ABC999 | 1 | 7/1/2019 |
| ABC999 | 2 | 7/1/2019 |
| ABC999 | 3 | 7/1/2019 |
| ABC999 | 4 | 7/1/2019 |
| ABC999 | 5 | NULL |
我需要编写 SQL 查询来查找已完成第 4 步或第 5 步的任何订单(即Step_Completed_Date 不为空)
我尝试了以下方法:
WITH
step4 AS
(
SELECT Order_No, Step_No, Step_Complete_Date AS Step_4_Complete_Date, NULL AS Step_5_Complete_Date
FROM tblSteps
WHERE Step_No = '4' AND Step_Complete_Date IS NOT NULL
),
step5 AS
(
SELECT Order_No, Step_No, NULL AS Step_4_Complete_Date, Step_Complete_Date AS Step_5_Complete_Date
FROM tblSteps
WHERE Step_No = '5' AND Step_Complete_Date IS NOT NULL
)
SELECT * FROM Step4
UNION
SELECT * FROM Step5
但它会导致:
| ORDER_NO | STEP_NO | STEP_4_COMPLETE_DATE | STEP_5_COMPLETE_DATE |
|:--------:|:-------:|:--------------------:|:--------------------:|
| ABC433 | 4 | 1/3/2019 | (null) |
| ABC433 | 5 | (null) | 1/7/2019 |
| ABC454 | 4 | 12/23/2018 | (null) |
| ABC454 | 5 | (null) | 12/23/2018 |
| ABC800 | 4 | 5/5/2019 | (null) |
| ABC999 | 4 | 7/1/2019 | (null) |
理想情况下,它看起来像:
| ORDER_NO | STEP_4_COMPLETE_DATE | STEP_5_COMPLETE_DATE |
|:--------:|:--------------------:|:--------------------:|
| ABC433 | 1/3/2019 | 1/7/2019 |
| ABC454 | 12/23/2018 | 12/23/2018 |
| ABC800 | 5/5/2019 | (null) |
| ABC999 | 7/1/2019 | (null) |
如何更改我的 SQL 以创建所需的输出?我已经设置了SQL FIDDLE here。
【问题讨论】:
标签: sql oracle oracle11g union