暂无图片
请教这个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


请输入正文
提交
相关推荐
Oracle库log file sync这个问题怎么优化?
回答 6
已采纳
检查磁盘IO,增加重做日志组的数量和大小,检查缓存刷新时间。
ORA-27301: OS failure message: No buffer space available
回答 1
已采纳
这是由于可用于网络缓冲区预留的空间较少,当OS这内核参数配置vm.minfreekbytes较小时容易遇到ORACLE是建议加大vm.minfreekbytes或者缩小lomtu在具有高物理内存的服务
hive、spark一般处理的是什么数据?
回答 1
已采纳
hive数据来源有很多很多,比如业务数据经过初步处理(数据清洗、结构化)后存入Hive,为以后的报表分析、实时计算做好数据准备。也就是说,具有业务意义的,需要长期保存供后续处理和使用的都可以存入Hiv
Oracle 查创建索引的默认 storage(next)大小的参数是哪个?
回答 1
INITRANS,该参数决定了索引块中可以保存的事务槽的数量
ora-29701
回答 3
1/看看css服务是否启动2/看看相关的资源的情况3/手动启动ora.cssd
oracle 11g where条件 还是自右向左执行吗?
回答 1
这是RBO的规则,从10g开始默认就是CBO了,where后面的顺序没有关系。《在Oracle中,什么是RBO和CBO?》
请教一SQL(Oracle数据库)
回答 3
已采纳
你可以使用Oracle的MODEL子句来实现这个需求。MODEL子句允许你使用一种类似于电子表格的方式来处理数据。以下是一个可能的解决方案:sqlSELECT&nbsp;&nbsp;FROM&nbsp
category: 1234, operation: scls_process_spawn, loc: read_pipe, OS error: 12, other: EOF on read pipe
回答 2
上传附件:alertiesdb1.log
Oracle 11g客户端,什么情况下安装32位什么情况下安装X64?
回答 4
已采纳
oracle客户端64位与32位只是针对不同位数的操作系统,在使用中几乎没有区别。在64bitOS上安装64bitOracleClient是支持的,安装32bitOracleClient也是支持的,同
Oracle 11.2.0.1和11.2.0.4的opatch通用吗?
回答 1
向下兼容,向上不行