暂无图片
请教这个SQL怎么写(列转行问题)?
我来答
分享
暂无图片 匿名用户
请教这个SQL怎么写(列转行问题)?
暂无图片 5M

如下图,有表Table_source,字段如下,怎么用一条SQL查出想要的结果result,列转成行

要求不用union和union all, 不能把前面的3列并成一列

怎么写呢?谢谢


我来答
添加附件
收藏
分享
问题补充
8条回答
默认
最新
L
lelepapa
路过学习
暂无图片 评论
暂无图片 有用 2
打赏 0
D
dyf1
路过
暂无图片 评论
暂无图片 有用 1
打赏 0
好好学习

学习了

暂无图片 评论
暂无图片 有用 0
打赏 0
游湖

路过看一下

暂无图片 评论
暂无图片 有用 1
打赏 0
张sir

坐等大佬

暂无图片 评论
暂无图片 有用 0
打赏 0
刘晓华

SQL如下,最内层为构造data_source

select dept_type,dept_code,dept_name,
   substr(col,1,instr(col,'-')-1) as col,
   substr(col,instr(col,'-')+1,length(col)-instr(col,'-')) as val
from (
   SELECT distinct dept_type,dept_code,dept_name,
       regexp_substr(';'||'col1-'||col1||';'||'col2'||-col2||';'||'col3'||'-'||col3,'[^;]+',1,level) as col
   from (
      select 'A' as dept_type,'A1' AS dept_code,'A1_Name' as dept_name,1 as col1,6 as col2,11 as col3 from dual
      union all
      select 'A' as dept_type,'A2' AS dept_code,'A2_Name' as dept_name,2 as col1,7 as col2,12 as col3 from dual
      union all
      select 'B' as dept_type,'B1' AS dept_code,'B1_Name' as dept_name,3 as col1,8 as col2,13 as col3 from dual
     )
   connect by level < regexp_count(';'||'col1-'||col1||';'||'col2'||-col2||';'||'col3'||'-'||col3,';') + 1
   )
order by 1,2,3,4   



暂无图片 评论
暂无图片 有用 1
打赏 0
我很低调嘛

列转行,可以用 unpivot 函数,具体语法可以自己百度下,我这里看出简单示例:

WITH source_tbl AS
(SELECT 'A' AS dept_type
,'A1' AS dept_code
,'A1_Name' AS dept_name
,1 AS col1
,6 AS col2
,11 AS col3
FROM dual       union ALL       select 'A' AS dept_type
,'A2' AS dept_code
,'A2_Name' AS dept_name
,2 AS col1
,7 AS col2
,12 AS col3
FROM dual       union ALL       select 'B' AS dept_type
,'B1' AS dept_code
,'B1_Name' AS dept_name
,3 AS col1
,8 AS col2
,13 AS col3
FROM dual)
SELECT *
FROM source_tbl unpivot(val FOR col IN(col1
,col2
,col3));


暂无图片 评论
暂无图片 有用 2
打赏 0
Thomas

select * from source_tbl unpivot (val for col in (col1,col2,col3));

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交