sql語句實現行轉列的3種方法執行個體,sql語句

來源:互聯網
上載者:User

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','語文,數學,英語'

它們的效果都是這樣的


以上三種方式實現行轉列,我們可以根據自己的需求採用不同的方法

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對幫客之家的支援。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.