SQL一行多列数据分解成多行数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL一行多列数据分解成多行数据相关的知识,希望对你有一定的参考价值。

上面的数据通过SQL语法生成下面的表数据

参考技术A select a.* from
(
select 省份,编号,姓名,手机1  from 表名
union all
select 省份,编号,姓名,手机2 as 手机1  from 表名
union all
select 省份,编号,姓名,手机3 as 手机1 from 表名
) as a
order by a.省份,a.编号,a.姓名

本回答被提问者采纳
参考技术B SELECT 省份, 编号, 姓名, 手机1 FROM 表
UNION ALL
SELECT 省份, 编号, 姓名, 手机2 AS 手机1 FROM 表
UNION ALL
SELECT 省份, 编号, 姓名, 手机3 AS 手机1 FROM 表

注: 上面的查询, 没有作排序的处理。

Oracle一列的多行数据拼成一行显示

参考技术A Oracle 提供了两个函数wmsys.wm_concat 和 LISTAGG函数。

      wmsys.wm_concat是Oracle 10g推出的,用来连接字符串,wmsys.wm_concat()中的参数也可以使多个,使用”||”拼接,如下例子:select deptno,wmsys.wm_concat(ename || '-' || job) name from emp group by deptno;

        LISTAGG是Oracle 11g推出的,它的作用和wmsys.wm_concat是一样。基础语法:LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)。用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。非常方便。

        同样是聚合函数,还有一个高级用法:就是over(partition by XXX),也就是说,在你不使用Group by语句时候,也可以使用LISTAGG函数:

使用实例:

结果:

以上是关于SQL一行多列数据分解成多行数据的主要内容,如果未能解决你的问题,请参考以下文章

sql中一对多关系的查询结果的多行转换成一行多列

SQL 多行多列数据清洗合并为一行

多行成一行多列

C#将查询返回的数据(一行多列)怎么转换成一列多行dataTable?

怎么将excel中两列转换成多行多列

sql查询 表中一列不重复 显示多列