今天又遇到了一個功能讓我需要把資料表做橫轉直的動作
所以再來練習一次
http://technet.microsoft.com/zh-tw/library/ms177410.aspx
假設有一個 SQL 長這樣
select a.bokno,a.title,isnull(c.title,0) as kind,isnull(c.kno,0) as kno,a.fedat
from dbo.vwSearchKids a left outer join dbo.KidBooks b on a.bokno = b.bokno
left outer join KidBookKnd c on b.kind = c.kno
(同一本書對照了多個分類)
select 後的資料如下
其中.............
bokno : 產品編號
title : 書名
kind : 分類中文名稱
kno : 分類編號
fedat : 書籍出版日期
今天我想要變成這樣 (把每一本書的分類都攤開來看)
也就是SQL 的橫轉直
SQL 只要這樣就可以了
select bokno,title,fedat,
isnull([文字書],0) [文字書],isnull([圖文書],0) [圖文書],isnull([知識漫畫],0) [知識漫畫],
isnull([小學學科],0) [小學學科],isnull([語文],0) [語文],isnull([健康與體育],0) [健康與體育],
isnull([數學],0) [數學],isnull([社會],0) [社會],isnull([藝術與人文],0) [藝術與人文],
isnull([自然與生活科技],0) [自然與生活科技],isnull([綜合活動],0) [綜合活動],
isnull([生活課程],0) [生活課程],isnull([學齡前],0) [學齡前],isnull([親子教養],0) [親子教養],
isnull([套書],0) [套書]
from (
select * from (
select a.bokno,a.title,isnull(c.title,0) as kind,isnull(c.kno,0) as kno,a.fedat
from dbo.vwSearchKids a left outer join dbo.KidBooks b on a.bokno = b.bokno
left outer join KidBookKnd c on b.kind = c.kno
) as x
PIVOT
(
min(kno)
FOR kind IN (
[文字書],[圖文書],[知識漫畫],[小學學科],[語文],
[健康與體育],[數學],[社會],[藝術與人文],
[自然與生活科技],[綜合活動],[生活課程],[學齡前],[親子教養],[套書]
)
) AS PivotTable
) as m order by fedat desc
ps : 那一大串中文名稱的欄位可以用程式產生
ps2 : table 名稱有改過了,所以沒有洩密喔