sql - 需要从行更改为列
问题描述
我有一张像
id,Jdate,Desc
1,3-jul,a
2,3-jul,b
3,3-jul,c
1,4-jul,a
2,4-jul,b
询问:
SELECT jdate,id_1,desc_1,id_2,desc_2,id_3,desc_3
from
(select jdate,id,
'id'+ CAST (row_number() OVER(PARTIOTION BY jdate order by jdate) AS varchar(5))AS id_seq,
desc,
'desc' + CAST (row_number() OVER(PARTIOTION BY jdate order by jdate) AS varchar(5))AS id_seq
FROM temp)temp
PIVOT
(MAX(lotid)
FOR id_seq IN(id_1,id_2,id_3)
)PIV;
我需要输出为
jdate,id_1,desc_1,id_2,desc_2,id_3,desc_3
3-jul,1,a,2,b,3,c
4-jul,1,a,2,b
解决方案
获得所需输出的另一种方法是通过以下查询
with abc as
(SELECT jdate, LISTAGG(id||','||desc, ',') WITHIN GROUP (ORDER BY id) AS list_1
FROM test_table
GROUP BY jdate)
select abc.jdate, regexp_substr(list_1,'[^,]+',1,1) id_1 ,
regexp_substr(list_1,'[^,]+',1,2) desc_1,
regexp_substr(list_1,'[^,]+',1,3) id_2,
regexp_substr(list_1,'[^,]+',1,4) desc_2,
regexp_substr(list_1,'[^,]+',1,5) id_3,
regexp_substr(list_1,'[^,]+',1,6) desc_3
from abc
或者
如果您只寻找数据输出,那么您可以在下面使用
select 'Jdate'||','||'id_1'||','||'desc_1'||','||'id_2'||','||'desc_2'||','||'id_3'||','|| 'desc_3' DATA from dual
union
SELECT jdate||','|| LISTAGG(id||','||desc, ',') WITHIN GROUP (ORDER BY id) as DATA FROM test_table GROUP BY jdate
order by data desc
希望这会有所帮助。
推荐阅读
- javascript - 如何在c3-charts的子图上生成Y轴网格线
- html - 如何使绝对定位元素不在父级中显示滚动条?
- c# - 当应用程序开始共享时如何调用旧意图?
- android - Android上不同的屏幕尺寸布局
- php - 使用 Instagram 基本显示 API 时出现“无效平台应用”错误
- android - 国家/地区定位如何在 Google Play 管理中心工作?
- javascript - Vuex - 更新突变中的对象
- c# - Android Xamarin - 带有 IP 地址的网络调用无法获取移动数据
- karate - 空手道加特林的 maxDuration 似乎无法正常工作
- python - 编写 CSV 时保留小数