行转列,列转行

8899man 8899man     2022-08-24     483

关键词:

 

oracle:

 

----------------------------- 行转列  --------------------------------
select * from demo
create table demo(id int,name varchar(20),nums int);  ---- 创建表
insert into demo values(1, ‘苹果‘, 1000);
insert into demo values(2, ‘苹果‘, 2000);
insert into demo values(3, ‘苹果‘, 4000);
insert into demo values(4, ‘橘子‘, 5000);
insert into demo values(5, ‘橘子‘, 3000);
insert into demo values(6, ‘葡萄‘, 3500);
insert into demo values(7, ‘芒果‘, 4200);
insert into demo values(8, ‘芒果‘, 5500);

select * from (select name, nums from demo) pivot (sum(nums) for name in (‘苹果‘ 苹果, ‘橘子‘, ‘葡萄‘, ‘芒果‘));
 

----------------- 列转行 ----------------------
create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);
 
insert into Fruit values(1,‘苹果‘,1000,2000,3300,5000);
insert into Fruit values(2,‘橘子‘,3000,3000,3200,1500);
insert into Fruit values(3,‘香蕉‘,2500,3500,2200,2500);
insert into Fruit values(4,‘葡萄‘,1500,2500,1200,3500);
 
 
select * from Fruit
 

select id , name, jidu, xiaoshou from Fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )
 
 
 
 
sqlserver:
-----------------------行转列----------------------------------
CREATE TABLE [dbo].[tbl_Student](
[ID] [int] IDENTITY(1,1) NOT NULL,
[学生ID] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[学生姓名] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[课程ID] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
[课程名称] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[成绩] [int] NULL,
[教师ID] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[教师姓名] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]


insert into tbl_Student values(
‘S3‘,‘王五‘,‘K4 ‘,‘政治‘,53,‘T4‘,‘赵老师‘);
insert into tbl_Student values(
‘S1‘,‘ 张三 ‘,‘K1 ‘,‘数学‘,61,‘T1‘,‘张老师‘);
insert into tbl_Student values(
‘S2‘,‘李四‘,‘K3 ‘,‘英语‘,88,‘T3‘,‘李老师‘);
insert into tbl_Student values(
‘S1‘,‘ 张三 ‘,‘K4 ‘,‘政治‘,77,‘T4‘,‘赵老师‘);
insert into tbl_Student values(
‘S2‘,‘李四‘,‘K4 ‘,‘政治‘,67,‘T5‘,‘周老师‘);
insert into tbl_Student values(
‘S3‘,‘王五‘,‘K2 ‘,‘语文‘,90,‘T2‘,‘王老师‘);
insert into tbl_Student values(
‘S3‘,‘王五‘,‘K1 ‘,‘数学‘,55,‘T1‘,‘张老师‘);
insert into tbl_Student values(
‘S1‘,‘ 张三 ‘,‘K2 ‘,‘语文‘,81,‘T2‘,‘王老师‘);
insert into tbl_Student values(
‘S4‘,‘赵六‘,‘K2 ‘,‘语文‘,59,‘T1‘,‘王老师‘);
insert into tbl_Student values(
‘S1‘,‘ 张三 ‘,‘K3 ‘,‘英语‘,37,‘T3‘,‘李老师‘);


select 学生姓名,课程ID,成绩,教师ID,教师姓名,
max(case 课程名称 when ‘政治‘ then 成绩 else 0 end) 政治,
max(case 课程名称 when ‘语文‘ then 成绩 else 0 end) 语文,
max(case 课程名称 when ‘数学‘ then 成绩 else 0 end) 数学,
max(case 课程名称 when ‘英语‘ then 成绩 else 0 end) 英语
from tbl_Student group by 学生姓名,课程ID,成绩,教师ID,教师姓名


select *
from (select * from tbl_Student)
a pivot (max(成绩) for 课程名称 in (语文,数学,英语,政治)) b




--------------------------列转行 -----------------------------------

CREATE TABLE [dbo].[tbl_test2](
    [UserID] [int] NULL,
[UserNo] [int] NULL,
[A] [int] NULL,
[B] [int] NULL,
[C] [int] NULL
) ON [PRIMARY]

insert into tbl_test2 values(1,1,11,22,33);

SELECT  USERID,USERNO,tType=attribute
FROM (select * from tbl_列转行测试)a
UNPIVOT
(
value FOR attribute IN(A, B,C)
) AS UPV




行转列-列转行_查询

开发过程中常遇到行转列或是列转行的问题,即需要将数据库中一张表信息进行行转列操作,再将每列(即每个字段)作为与其他表进行联表查询的字段进行显示。一、行转列:将原来同一列下多行的不同内容作为多个字段,输... 查看详情

hive行转列&列转行

参考技术Ahive中行转列和列转行比较常见,一般是用于中间数据的生产。行转列一般采用IF进行判断,筛选出本列对应的数据进行统计。如果我们直接就会报错那么,我们由此引入LATERALVIEW函数对一列进行炸裂,其他列保持不变对... 查看详情

行转列/列转行

行转列:selectt.*,t.rowidfromTEST1t ID C1  C2  C31 小红 数学 10  2 小红 语文 20  3 小栏 数学 15  4小栏语文25 - 查看详情

oracle逗号分割,列转行,行转列转载(代码片段)

https://www.cnblogs.com/gdzhong/p/4726315.html?tvd SQL代码列转行selectREGEXP_SUBSTR(a.rolecode,'[^,]+',1,l)rolecodefrom(select'a,aa,aaa'rolecodefromdual)a,(SELECTLEVELlFROMDUALCONNECTBY 查看详情

hivesql行列转换(行转列,列转行)(代码片段)

在Hivesql应用中会遇到“行转列”和“列转行”的场景,下面介绍其基本使用语法。1.行转列:关键字:collect_set()/collect_list()、concat_ws()1)collect_set()/collect_list():collect_set()函数只接受基本数据类型,作用是... 查看详情

hivesql行转列与列转行

1.列转行1.1需求现在我们有一张统计每日用户工作量的表dws_cms_user_workload_1d,记录一个用户(uid)在一天内的审核次数(cnt)、审核字数(words)、审核视频数(videos)、审核音频数(audios):用户ID审核次数审核字数审核视频数审核音频数10001... 查看详情

sqlpivot(行转列)unpivot(列转行)apply

pivot(列转行):当我们在统计数据时,可能会用到(case字段when值Then字段end)来查询,但是这种有个问题就是查询项越多语句冗长。我们可以用pivot代替:具体使用方法:http://www.cnblogs.com/lwhkdash/archive/2012/06/26/2562979.htmlhttps://docs.mi... 查看详情

hive的行转列和列转行

...ist(`item_sku_id`))from  table1groupby  `order_id`;2、行转列,即table2查询出table1select  `order_id`,  `item_sku_id`from  table2lateralviewexplode(split(item_sku_id),',')astableasitem_sku_id; 查看详情

sas行转列&&列转行

...aytr[1:3]chineseenglishmath;tr(i)=score;end;keepsnochineseenglishmath;run;*行转列;proctransposedata=x1out=x2name=class;bysno;varchineseenglishmath;run;datax2;setx1;arraytr[1:3]chinesee 查看详情

行转列,列转行,图一转图二或图二转图一(代码片段)

图一:NamCourseScorezhangsanChinese85zhangsanMaths76zhangsanEnglish80lisiChinese82lisiMaths90lisiEnglish55图二:NamChineseMathsEnglishzhangsan857680lisi829055图一转图二:SELECTNam,SUM(IF(Course=‘Chinese‘,Score,0) 查看详情

hive函数之~行转列与列转行(代码片段)

4、行转列1.相关函数说明CONCAT(stringA/col,stringB/col…):返回输入字符串连接后的结果,支持任意个输入字符串;CONCAT_WS(separator,str1,str2,...):它是一个特殊形式的CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参... 查看详情

hive关于行转列,列转行的使用

参考技术A行转列:定义:就是把形如id---------name1---------a2---------a3---------a4---------a的数据转换为id-------------name1,2,3,4---------a这里把四行的数据变成了由一行显示,这就是行转列。首先要用到的是collect_set或者collect_list,前者... 查看详情

sql行转列列转行(代码片段)

目录一、整理测试数据SQL行转列、列转行这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。一、整理测试数据createtablewyc_test( idint(32)not... 查看详情

sql行转列列转行(代码片段)

目录一、整理测试数据SQL行转列、列转行这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。一、整理测试数据createtablewyc_test( idint(32)not... 查看详情

sql行转列列转行(代码片段)

目录一、整理测试数据SQL行转列、列转行这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。一、整理测试数据createtablewyc_test( idint(32)not... 查看详情

sql行转列列转行(代码片段)

目录一、整理测试数据SQL行转列、列转行这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。一、整理测试数据createtablewyc_test( idint(32)not... 查看详情

sql面试:sql中的行转列和列转行(代码片段)

...技能。而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可以说这也是一道经典的SQL题目,本文就这一问题做以介绍分享。给定如下模拟数据集,这也是SQL领域经典的学生成绩表问题。两张 查看详情

hive行转列和列转行(代码片段)

1.行转列(多行变一行,聚合)  表数据select*fromstudent;student.idstudent.name4fuqiang5minzhu6hexie  collect_set()函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。selectcollect_set(name)fromstudent;["fuqi... 查看详情