博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

行列轉換方法

Posted on 2011-01-23 00:16  ☆Keep★Moving☆  阅读(169)  评论(0编辑  收藏  举报

---drop table tb

create table tb(姓名 nvarchar(10) , 课程 nvarchar(10) , 分数 int)

insert into tb values(N'张三' , N'语文' , 74)

insert into tb values(N'张三' , N'数学' , 83)

insert into tb values(N'张三' , N'物理' , 93)

insert into tb values(N'李四' , N'语文' , 74)

insert into tb values(N'李四' , N'数学' , 84)

insert into tb values(N'李四' , N'物理' , 94)

go

select * from tb

--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)

select 姓名 as 姓名 ,

max(case 课程 when N'语文' then 分数 else 0 end) 语文,

max(case 课程 when N'数学' then 分数 else 0 end) 数学,

max(case 课程 when N'物理' then 分数 else 0 end) 物理

from tb

group by 姓名

 

--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b


--更為詳細一D的

SELECT 姓名,
语文 AS N'语文',
数学 AS N'数学',
物理 AS N'物理' --相當於每列的內容,也就是相當 Other欄位以課程來擺成列時,當等於物理時取的值
FROM tb
PIVOT (SUM(分数) FOR 课程 in (语文,数学,物理) ) AS pvt
--FOR後面的內容是一個欄位,IN的內容是欄位裡各種CASE