oracle 如何在SQL查询中基于一列合并行

xmq68pz9  于 2023-05-28  发布在  Oracle
关注(0)|答案(1)|浏览(119)

我已经编写了下面的SQL脚本,但仍在为将两行合并为一行而努力。

编辑25.05.2023

第一个脚本从表TB.ORDER.O导出数据。订单类型有SHIPPED_ORDERRETURN_ORDER两种。

select
    O.ISSUE_ID "Case ID",
    O.ORDER_ID,
    O.ORDER_TYPE
from 
  TB.ORDER O 
where
  O.CREATED_DATE > '01-Jul-20'
  and O.ORDER_TYPE in ('SHIPPED_ORDER','RETURN_ORDER')

| 病例ID|订单类型|订单ID|
| - -----|- -----|- -----|
| 案例1|发货订单|已发货订单AAA|
| 案例1|返回订单|退回订单AAB|
| 案例二|发货订单|已发货订单CCC|
| 案例二|返回订单|退回订单CCD|
我需要转换成两列的订单类型,所以我写了下面的脚本:

SELECT
    O.ISSUE_ID "Case ID",
    O.ORDER_TYPE,
    CASE
        WHEN O.ORDER_TYPE = 'SHIPPED_ORDER' THEN O.ORDER_ID
    END AS SHIPPED_ORDER,
    CASE
        WHEN O.ORDER_TYPE = 'RETURN_ORDER' THEN O.ORDER_ID
    END AS RETURN_ORDER
from 
  TB.ORDER O 
where
  O.CREATED_DATE > '01-Jul-20'
  and O.ORDER_TYPE in ('SHIPPED_ORDER','RETURN_ORDER')

这是我目前得到的结果:
| 病例ID|发货订单|返回订单|
| - -----|- -----|- -----|
| 案例1|已发货订单AAA||
| 案例1||退回订单AAB|
| 案例二|已发货订单CCC||
| 案例二||退回订单CCD|
这就是我想要的:
| 病例ID|发货订单|退货订单|
| - -----|- -----|- -----|
| 案例1|已发货订单AAA|退回订单AAB|
| 案例二|已发货订单CCC|退回订单CCD|
我已经尝试使用CASE表达式,如代码所示,但它仍然不能按我想要的那样工作。

exdqitrt

exdqitrt1#

应用聚合:MAX聚合函数将允许空值被非空值吸收。请记住将选定的非聚合列添加到GROUP BY子句中。

SELECT O.ISSUE_ID,
       MAX(CASE WHEN O.ORDER_TYPE = 'SHIPPED_ORDER' 
                THEN O.ORDER_ID
           END) AS SHIPPED_ORDER,
       MAX(CASE WHEN O.ORDER_TYPE = 'RETURN_ORDER' 
                THEN O.ORDER_ID
           END) AS RETURN_ORDER
FROM TB.ORDER O 
WHERE O.CREATED_DATE > '01-Jul-20'
  AND O.ORDER_TYPE IN ('SHIPPED_ORDER','RETURN_ORDER')
GROUP BY O.ISSUE_ID

输出

| 问题ID|发货订单|返回订单|
| - -----|- -----|- -----|
| 案例1|已发货订单AAA|退回订单AAB|
| 案例二|已发货订单CCC|退回订单CCD|
查看演示here

相关问题