sqlsql语句实现行转列的3种方法(代码片段)

平凡加班狗 平凡加班狗     2023-01-14     819

关键词:

SQL sql语句实现行转列的3种方法系列文章目录

前言

将列值旋转为列名(即行转列)是我们在开发中经常会遇到的一个需要,下面这篇文章主要给大家介绍了关于sql语句实现行转列的3种方法,分别给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起学习学习吧
一般在做数据统计的时候会用到行转列,假如要统计学生的成绩,数据库里查询出来的会是这样的,但这并不能达到想要的效果,所以要在查询的时候做一下处理,下面话不多说了,来一起看看详细的介绍

这里附上这个表结构的sql代码

CREATE TABLE TestTable(
 [Id] [int] IDENTITY(1,1) NOT NULL,
 [UserName] [nvarchar](50) NULL,
 [Subject] [nvarchar](50) NULL,
 [Source] [numeric](18, 0) NULL
) ON [PRIMARY]
go
INSERT INTO TestTable ([UserName],[Subject],[Source]) 
 SELECT N'张三',N'语文',60 UNION ALL
 SELECT N'李四',N'数学',70 UNION ALL
 SELECT N'王五',N'英语',80 UNION ALL
 SELECT N'王五',N'数学',75 UNION ALL
 SELECT N'王五',N'语文',57 UNION ALL
 SELECT N'李四',N'语文',80 UNION ALL
 SELECT N'张三',N'英语',100
GO

最终要的效果是这样的:

第一种方式:静态行转列

select UserName 姓名,
sum(case Subject when '语文' then Source else 0 end) 语文,sum(case Subject when '数学' then Source else 0 end) 数学,
sum(case Subject when '英语' then Source else 0 end) 英语 from TestTable group by UserName

第二种方式:用povit行转列

select * from 
(select UserName,Subject,Source from TestTable) testpivot(sum(Source) for Subject in(语文,数学,英语)
) pvt

第三种方式:用存储过程行转列

alter proc pro_test
@userImages varchar(200),
@Subject varchar(20),
@Subject1 varchar(200),
@TableName varchar(50)
as
 declare @sql varchar(max)='select * from (select '+@userImages+' from'+@TableName+') tab
pivot
(
sum('+@Subject+') for Subject('+@Subject1+')
) pvt'
exec (@sql)
go
exec pro_test 'UserName,Subject,Source',
'TestTable',
'Subject',
'语文,数学,英语'

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

...,可以使用多种方法,在SQL2005以前可以使用casewhenthen...语句,但这种方法的问题在于列举的列名要写死,如果列名很多,casewhen语句会很长,并不优雅。所以需要SQLServer提供新的语句能够实现。在2005版本就推出了pivot/unpivot关键... 查看详情

使用自连接的方法实现行转列(代码片段)

  CREATETABLE`user_kills`(`id`int(11)NOTNULL,`user_id`int(11)DEFAULTNULL,`timestr`datetimeDEFAULTNULL,`kills`int(11)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;INSERTINTO`user_kills`VALUES(‘1‘,‘2‘,‘2020-01-1000:00:00‘,‘10‘);INSERTINTO`user_kills`VALUES(‘... 查看详情

sql中怎么将行转成列?(代码片段)

...xff01;!SQL中怎么将行转成列?1.使用CASE...WHEN...THEN语句实现行转列,参考如下代码:2.使用IF()函数实现行转列,参考如下代码:天天这需求就神奇!!!!SQL中怎么将行转成列?我们以MyS... 查看详情

mysql---行转列(代码片段)

MySQL—行转列一、行转列1、SqlServer和Orcle中可以使用pivot行转列函数快速实现,而MySQL中没有pivot:SELECT*FROMstudentPIVOT(SUM(score)FORsubjectIN(语文,数学,英语))2、MySQL实现行转列SELECTname,MAX(CASEWHENsubject='语文'THENscoreEL 查看详情

hive行转列lateralviewexplode使用方法(代码片段)

原数据表a,每列都是由逗号分隔的字符串:bb_id1,2,31,12,3我们需要的是bb_id1231123使用LATERALVIEWexplode函数可进行行转列selectbb_id2fromaLATERALVIEWexplode(split(bb_id),','))bbidasbb_id2;  查看详情

oracle语句集锦(代码片段)

1、行转列(PIVOT函数)语法:TABLE_SOURCEPIVOT(聚合函数(value_column)FORpivot_columnIN(<column_list>))效果图:--行转列select*fromSalesListpivot(max(salesNum)forshangPinin(--shangPin即要转成列的字段‘上衣‘as上衣,--max(salesNum)此处必须 查看详情

mysql行转列的问题,但是否并接?

...里为左图,我想转换成右图这样,并且可以查询,用查询语句我之前写了代码但是只能显示了人名1,并不合适SELECT(caseWHEN人名1isnotnullthen人名1 WHEN人名2isnotnullthen人名2 WHEN人名3isnotnullthen人名3 WHEN人名2isnotnullthen人名4)人名FROMtable... 查看详情

行转列的处理。

 selecta.id,stuff((select‘,‘+[value]fromtbasbwherea.id=b.idforxmlpath(‘‘)),1,1,‘‘)[value]fromtbasa  groupbya.id 查看详情

oracle行转列方法集合(代码片段)

...09;语法:select需要分组的字段,wmsys.wm_concat(distinct需要行转列合并展示的字段)from表名groupby需要分组的字段;实战:查询各年级涉及的班级,多个班级默认用“,”隔开按一行合并展示。select*fromCLASS_STATISTICS; selectGRADE,wms... 查看详情

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

1、行转列一般通过casewhen语句来实现。createtablestudentscores(usernamevarchar(20),subjectvarchar(30),scorefloat);insertintostudentscoresselect‘Nick‘,‘语文‘,80;insertintostudentscoresselect‘Nick‘,‘数学‘,90;insertintostu 查看详情

oracle——行转列与列转行(代码片段)

...的列进行判断输出就能转换。创建表和增加测试数据建表语句和增加测试数据sql如下所示:createtableXJ_TEST_LtoH(stuidvarchar(20),stunamevarchar(40),coursenamevarchar(40),scoreint);insertintoXJ_TEST_LtoH(stuid,Stuname,coursename,score)values('sc202201001',... 查看详情

数据行转列实例

??在系统开发中经常遇到进行数据的统计,并将数据行转列的情景。比如表中的表示。可是在数据库中呈现出来的数据往往是横行的样式。这就须要一个转换。转换的方式有两种方式。1.利用crossjoin去进行转换。2.利用casewhen函数... 查看详情

sqlserver的forxmlpath与变通的行转列(代码片段)

...结果行输出成XML格式,我们可以通过这个语法做一些变通实现一些特定的功能,比如说行转列。要会变通的话,当然首先是要知道FORXMLPATH的语法。FORXMLPATH的简单语法假设有一个hobby表(爱好),表中有两个字段,一个是hobbyID(... 查看详情

mysql行转列,对列的分组求和,对行求和

 CREATETABLEstudents(   idINTPRIMARYKEY,   NAMEVARCHAR(11));CREATETABLEcourses(   idINTPRIMARYKEY,   NAMEVARCHAR(11)); CREATETABLEscores(   sidINT,   cidINT,   scoreINT,  RIMARYKEY(sid,cid)) 查看详情

grepsed和awk等方法实现行转列

[[email protected]~]# cat file1 2 34 5 67 8 9[[email protected]~]# cat file |xargs -n1[[email protected]~]# xargs - 查看详情

sqlserver怎么行转列?

...据3,需要把学生的每门成绩集中到一行4,编写PIVOT函数实现5,运行以后实现行转列6,最后还可以用casewhen来实现参考技术A😱😱😱😱😱😱😱😱😱😱😱😱有谁能告诉我 查看详情

sqlserver动态行转列(参数化表名分组列行转列字段字段值)

...容(Contents)本文所涉及的内容(Contents)背景(Contexts)实现代码(SQLCodes)方法一:使用拼接SQL,静态列字段;方法二:使用拼 查看详情

oracle行转列(代码片段)

行转列,例子:统计各科各出院情况人数withtas( SELECTb.科室ID,a.患者ID,a.resultFROM患者信息表awherea.出院时间>=to_date(\'2021-6-100:00:00\',\'yyyy-MM-ddhh24:mi:ss\')anda.出院时间<=to_date(\'2021-6-2023:59:59\',\'yyyy-MM-ddhh24:mi:s 查看详情