1. 行列轉換--普通
假設有張學生成績表(cj)如下
name subject result
張三 語文 80
張三 數學 90
張三 物理 85
李四 語文 85
李四 數學 92
李四 物理 82
想變成
姓名 語文 數學 物理
張三 80 90 85
李四 85 92 82
declare @sql varchar(4000)
set @sql = 'select name'
select @sql = @sql + ',sum(case subject when '''+subject+''' then result end) ['+subject+']'
from (select distinct subject from cj) as a
select @sql = @sql+' from cj group by name'
select @sql
exec(@sql)
2. 行列轉換--合併
有表a,
id pid
1 11 2
1 32 1
2 23 1
如何化成表b:
id pid
1 1,2,3
2 1,2
3 1建立乙個合併的函式
alter function fmerg(@id int)
returns varchar(8000)
asbegin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from test where id=@id
set @str=right(@str,len(@str)-1)
return(@str)
endgo
--呼叫自定義函式得到結果
select id,dbo.fmerg(id) from test
sql行列轉換
問題 如果上述兩表互相換一下 即表結構和資料為 姓名 語文 數學 物理 張三 74 83 93 李四 74 84 94 想變成 得到如下結果 姓名 課程 分數 李四 語文 74 李四 數學 84 李四 物理 94 張三 語文 74 張三 數學 83 張三 物理 93 create table tb ...
SQL 行列轉換
資料列轉換成行。其中一列需要轉換成行,因為列的值不確定所以用動態執行sql sql物件拼寫出要轉換行的列的值。declare sql varchar 1000 select sql isnull sql advertise name from tbl advertise master select ...
sql行列轉換
1 靜態的行轉列 sql select start dt,max case type name when 總的參與人數 then value end as 總的參與人數 max case type name when 會員參與人數 then value end as 會員參與人數 max case ...