如何在SQL查询中基于单列合并行?现有脚本问题求助
解决方案
要实现将同一Case ID的两行合并为一行,你需要结合GROUP BY分组和聚合函数(如MAX())来处理CASE表达式的结果,修正后的SQL如下:
SELECT O.ISSUE_ID "Case 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
原查询的问题
你之前的CASE表达式只是为每行生成了对应订单类型的列值,但没有将同一Case ID的行合并。同一Case ID下的两行分别对应SHIPPED和RETURN的非空值,需要通过分组聚合来把这些值整合到同一行中。
关键说明
GROUP BY O.ISSUE_ID:将所有相同Case ID的记录归为一组,确保每个Case ID只输出一行结果MAX():在每组中提取CASE表达式生成的非空值(空值会被聚合函数忽略),从而将SHIPPED和RETURN的订单ID合并到同一行- 移除了原查询中的
O.ORDER_TYPE列:该列会破坏分组逻辑,导致无法合并行
执行上述查询后,你将得到期望的结果:
| Case ID | SHIPPED_ORDER | RETURN_ORDER |
|---|---|---|
| CASE 1 | Shipped Order AAA | Returned Order AAB |
| CASE 2 | Shipped Order CCC | Returned Order CCD |
内容的提问来源于stack exchange,提问作者Firhed
相关产品推荐
相关产品推荐

