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]goINSERT 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'英語',100GO
這裡我用了三種方法來實現行轉列第一種:靜態行轉列
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+') tabpivot(sum('+@Subject+') for Subject('+@Subject1+')) pvt'exec (@sql)goexec pro_test 'UserName,Subject,Source','TestTable','Subject','語文,數學,英語'
它們的效果都是這樣的
以上三種方式實現行轉列,我們可以根據自己的需求採用不同的方法
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對幫客之家的支援。