接上篇,要是課程我不知道怎麼辦呢?“辦法比困難多”,考慮後得出一個解決方案。
就是用字串拼接的方法,把所有的課程都拼接起來。不是很繁瑣。代碼如下:
USE TEMPDB
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'TEMPDB.[dbo].[#temptable]') AND type in (N'U'))
begin
drop table #temptable
end
create table #temptable
(
ID int ,
course varchar(10),
Point int
)
insert into #temptable
select 1 ,'語文',87
union all
select 1 ,'數學',98
union all
select 2,'語文',54
union all
select 2,'化學',97
union all
select 2,'數學',92
union all
select 4,'數學',86
union all
select 5 ,'數學',65
union all
select 6,'語文',76
union all
select 6,'數學',76
union all
select 6,'化學',76
select * from #temptable
declare @str varchar(2000)
set @str = ' select ID '
select @str = @str + ' , max(case when course = ''' + course +''' then Point else 0 end ) as ''' + course + ''''
from (select distinct course from #temptable) A
set @str = @str + ' from #temptable group by ID '
print @str
exec (@str)
解決啦,說真的這個不是很複雜的問題, 剛要高興,有哥們說這種問題在sql2005中很見到就能解決。
簡單調查下,發現兩個關鍵字PIVOT/UNPIVOT,可以輕鬆實現行列轉換的需求。
看來得繼續前進啦,看看sql2005如何簡單實現的。(未完待續)