Oracle行转列和列转行的方法汇总

您所在的位置:网站首页 转行的定义 Oracle行转列和列转行的方法汇总

Oracle行转列和列转行的方法汇总

2024-07-07 10:33| 来源: 网络整理| 查看: 265

目录 行转列方法一:Oracle中的Pivot函数方法二:聚合函数(max)结合decode函数方法三:使用聚合函数(max)结合case when 函数 列转行 方法一:Oracle中的unpivot函数方法二:使用union all方法

行转列 方法一:Oracle中的Pivot函数

说明:pivot(聚合函数 for 列名 in(类型)),其中 in(‘’) 中可以指定别名,in中还可以指定子查询,比如 select distinct ranking from temp

SELECT * FROM [StudentScores] /*数据源*/ AS P PIVOT ( SUM(Score/*行转列后 列的值*/) FOR p.Subject/*需要行转列的列*/ IN ([语文],[数学],[英语],[生物]/*列的值*/) ) AS T

示例代码:

with temp as( select '四川省' nation ,'成都市' city,'第一' ranking from dual union all select '四川省' nation ,'绵阳市' city,'第二' ranking from dual union all select '四川省' nation ,'德阳市' city,'第三' ranking from dual union all select '四川省' nation ,'宜宾市' city,'第四' ranking from dual union all select '湖北省' nation ,'武汉市' city,'第一' ranking from dual union all select '湖北省' nation ,'宜昌市' city,'第二' ranking from dual union all select '湖北省' nation ,'襄阳市' city,'第三' ranking from dual ) select * from (select nation,city,ranking from temp) pivot (max(city) for ranking in ('第一' as 第一,'第二' AS 第二,'第三' AS 第三,'第四' AS 第四));

结果 在这里插入图片描述

方法二:聚合函数(max)结合decode函数

说明:decode的用法:decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)

该函数的含义如下:

IF 条件=值1 THEN     RETURN(翻译值1) ELSIF 条件=值2 THEN     RETURN(翻译值2)     ...... ELSIF 条件=值n THEN     RETURN(翻译值n) ELSE     RETURN(缺省值) END IF

示例代码:

with temp as( select '四川省' nation ,'成都市' city,'第一' ranking from dual union all select '四川省' nation ,'绵阳市' city,'第二' ranking from dual union all select '四川省' nation ,'德阳市' city,'第三' ranking from dual union all select '四川省' nation ,'宜宾市' city,'第四' ranking from dual union all select '湖北省' nation ,'武汉市' city,'第一' ranking from dual union all select '湖北省' nation ,'宜昌市' city,'第二' ranking from dual union all select '湖北省' nation ,'襄阳市' city,'第三' ranking from dual ) select nation, max(decode(ranking, '第一', city, '')) as 第一, max(decode(ranking, '第二', city, '')) as 第二, max(decode(ranking, '第三', city, '')) as 第三, max(decode(ranking, '第四', city, '')) as 第四 from temp group by nation;

在这里插入图片描述

方法三:使用聚合函数(max)结合case when 函数 with temp as( select '四川省' nation ,'成都市' city,'第一' ranking from dual union all select '四川省' nation ,'绵阳市' city,'第二' ranking from dual union all select '四川省' nation ,'德阳市' city,'第三' ranking from dual union all select '四川省' nation ,'宜宾市' city,'第四' ranking from dual union all select '湖北省' nation ,'武汉市' city,'第一' ranking from dual union all select '湖北省' nation ,'宜昌市' city,'第二' ranking from dual union all select '湖北省' nation ,'襄阳市' city,'第三' ranking from dual ) select case when nation='湖北省' then '湖北省1' when nation='四川省' then '四川省1' else null end as "省份", max( case when ranking='第一' then city else null end ) as "第一", max( case when ranking='第二' then city else null end ) as "第二", max( case when ranking='第三' then city else null end ) as "第三", max( case when ranking='第四' then city else null end ) as "第四" from temp group by case when nation='湖北省' then '湖北省1' when nation='四川省' then '四川省1' else null end;

在这里插入图片描述

列转行 方法一:Oracle中的unpivot函数

说明:unpivot(自定义列名/列的值/ for 自定义列名/列名/ in(列名))

with temp as( select '四川省' nation ,'成都市' 第一,'绵阳市' 第二,'德阳市' 第三,'宜宾市' 第四 from dual union all select '湖北省' nation ,'武汉市' 第一,'宜昌市' 第二,'襄阳市' 第三,'' 第四 from dual ) select nation,name,title from temp unpivot (name for title in (第一,第二,第三,第四))t

在这里插入图片描述

方法二:使用union all方法 with temp as( select '四川省' nation ,'成都市' 第一,'绵阳市' 第二,'德阳市' 第三,'宜宾市' 第四 from dual union all select '湖北省' nation ,'武汉市' 第一,'宜昌市' 第二,'襄阳市' 第三,'' 第四 from dual ) select nation,第一 as ranking,'第一' as title from temp union all select nation,第二 as ranking,'第二' as title from temp union all select nation,第三 as ranking,'第三' as title from temp order by nation,title desc

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3