今天碰到个需求是多行转多列,在网上没找到类似问题(多行转多列)的有效解决方法
这是我个人头脑风暴出的解决方式,请参考
比如一个表,有多个维度(时间,险种,机构),
-- Create table
create table t
(
orgcode varchar2(10),
stsdate date,
risk varchar2(10),
VALUE NUMBER
)
;
造数据如下图
需要展示的结果为:
这个通过case when 是可以实现的,不过是维度比较少的时候用着比较方便
如果维度很多,维度的值也比较多,case when就写着很费劲
我这里用的是pivot关键字
SELECT *
FROM (SELECT ORGCODE,
TO_CHAR(STSDATE, 'yyyy-mm-dd') || RISK WD, --把需要展示维度的列拼接到一块
VALUE
FROM T) PIVOT(MAX(VALUE) FOR WD IN('2019-09-19P0' as 同期p0,--上边拼接到一块的所有结果合集
'2019-09-19P1',
'2019-09-19P2',
'2018-09-19P0',
'2018-09-19P1',
'2018-09-19P2'))
用上边的sql查出来的结果如下:
如有更好的解决方式,请留言交流
谢谢~