(Oracle)将SQL查询结果多行数据转一行横向展示

sql 查询结果多行数据转换一行展示(Oracle)

在这里插入图片描述

问题简述
如上图所示,sql语句执行结果,column_nm2、column_nm5、column_nm7有多种分类码值(001、002、003),并且每种分类码值都单独占据一行,导致相同字段有很多行,这不是我想要的查询结果,我希望查询结果中字段的 所有分类码值按照顺序都展示在同一行

解决方案:
先利用 ROW_NUMBER() OVER(PARTITION BY...ORDER BY...) AS RN 实现数据的分组排序编号,再结合 MAX函数CASE WHEN 实现将纵向的分类码值数据(多行)转换为横向展示。

SELECT 
    字段编码,
    字段名称,
    MAX(CASE WHEN RN = 1 THEN A END) AS 分类码值1,
    MAX(CASE WHEN RN = 1 THEN B END) AS 码值1编码,
    MAX(CASE WHEN RN = 1 THEN C END) AS 码值1名称,
    MAX(CASE WHEN RN = 1 THEN D END) AS 码值1是否启用,
    MAX(CASE WHEN RN = 2 THEN A END) AS 分类码值2,
    MAX(CASE WHEN RN = 2 THEN B END) AS 码值2编码,
    MAX(CASE WHEN RN = 2 THEN C END) AS 码值2名称,
    MAX(CASE WHEN RN = 2 THEN D END) AS 码值2是否启用,
    MAX(CASE WHEN RN = 3 THEN A END) AS 分类码值3,
    MAX(CASE WHEN RN = 3 THEN B END) AS 码值3编码,
    MAX(CASE WHEN RN = 3 THEN C END) AS 码值3名称,
	MAX(CASE WHEN RN = 3 THEN D END) AS 码值3是否启用
FROM (
    SELECT 
        T1.字段编码,
        T1.字段名称,
        T2.分类码值序列 A,
        T2.分类码值编码 B,
        T2.分类码值名称 C,
        T2.分类码值是否启用 D,
        ROW_NUMBER() OVER(PARTITION BY T1.字段编码 ORDER BY T2.分类码值序列) AS RN 
    FROM TABLE1 T1, TABLE2 T2 
    WHERE T1.ID = T2.ID
) t
GROUP BY 字段编码, 字段名称
ORDER BY 字段编码;

在这里插入图片描述

注意:
上述只是示例,请结合自己的实际问题来处理,请勿照本宣科,目的是告诉大家解决此类问题时,了解 ROW_NUMBER() OVER(PARTITION BY...ORDER BY...) AS RN MAX函数CASE WHEN 的用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值