在企業應用中,經常會開發報表系統,而在報表中又經常用到行列轉換,這裡有乙個經典的應用例項:
原表:
姓名 科目 成績
張三 語文 80
張三 數學 90
張三 物理 85
李四 語文 85
李四 物理 82
李四 英語 90
李四 政治 70
王五 英語 90
轉換後的表:
姓名 數學 物理 英語 語文 政治
李四 0 82 90 85 70
王五 0 0 90 0 0
張三 90 85 0 80 0
例項:
set ansi_nulls on
goset quoted_identifier on
goif exists(select * from dbo.sysobjects where name=n'cj')
drop table cj
gocreate table [dbo].[cj](
[name] [nvarchar](50) null,
[major] [nvarchar](50) null,
[grade] [int] null
) on [primary]
goinsert into cj values('張三','語文',80)
insert into cj values('張三','數學',90)
insert into cj values('張三','物理',85)
insert into cj values('李四','語文',85)
insert into cj values('李四','物理',82)
insert into cj values('李四','英語',90)
insert into cj values('李四','政治',70)
insert into cj values('王五','英語',90)
select * from cj --顯示原表內容
declare @sql varchar(8000)
set @sql = 'select name as 姓名'
select @sql = @sql + ',sum(case major when '''+major+''' then grade else 0 end) ['+major+']'
from (select distinct major from cj) as cj1 --把所有唯一的科目的名稱都列舉出來
select @sql = @sql+' from cj group by name'
exec (@sql)
行列轉換等經典SQL語句
在企業應用中,經常會開發報表系統,而在報表中又經常用到行列轉換,這裡有乙個經典的應用例項 原表 姓名 科目 成績 張三 語文 80 張三 數學 90 張三 物理 85 李四 語文 85 李四 物理 82 李四 英語 90 李四 政治 70 王五 英語 90 轉換後的表 姓名 數學 物理 英語 語文 ...
行列轉換等經典SQL語句
在企業應用中,經常會開發報表系統,而在報表中又經常用到行列轉換,這裡有乙個經典的應用例項 原表 姓名 科目 成績 張三 語文 80 張三 數學 90 張三 物理 85 李四 語文 85 李四 物理 82 李四 英語 90 李四 政治 70 王五 英語 90 轉換後的表 姓名 數學 物理 英語 語文 ...
經典SQL 行列轉換
姓名科目 成績張三 語文66 張三數學 77張三 英語88 李四語文 99李四 數學100 李四英語 55王五 語文44 王五數學 33馬六 英語22 馬六語文 11姓名 語文數學 英語張三 6677 88李四 99100 55王五 44330馬六 11022select name,sum case...