今天又遇到了一個功能讓我需要把資料表做橫轉直的動作

所以再來練習一次

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 後的資料如下

x1

其中.............

bokno : 產品編號

title : 書名

kind : 分類中文名稱

kno : 分類編號

fedat : 書籍出版日期

 

今天我想要變成這樣 (把每一本書的分類都攤開來看)

也就是SQL 的橫轉直

 x2

 

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 名稱有改過了,所以沒有洩密喔

arrow
arrow
    全站熱搜

    小雕 發表在 痞客邦 留言(0) 人氣()