MSSQL類似MySQL(GROUP_CONCAT)功能!

MSSQL類似MySQL(GROUP_CONCAT)功能!

拜EXCEL所賜,現在做報表很多需求都是使用者從原來EXCEL表單轉換而來~

一般而言,如果我們有Group by需求的報表,絕大部分都是看彙總後的資料,像是AVG、SUM、COUNT…等等

或者使用者想看類似樞紐分析表資料長相的時候,SQL SERVER 2005 提供 PIVOT也能幫得上忙。

( 基本上要不是走入IT這行,我覺得EXCEL用的好,很多報表可以不用做的那麼辛苦 !!)

Anyway 在使用者最大情況下,IT小小工程師也只能儘量滿足需求。

某天在廠區工作的時候,就遇到這種情況,使用者想要的報表長相如下:

Server1

而實際在資料庫內的資料呈現則是如下圖:

Server3

 

一般來說,我們針對這種資料,都會使用矩陣來呈現報表,如下圖:

Server2

透過Reporting Service來製作矩陣報表,真的非常容易,但要呈現使用者需要的樣子,就得在SQL上面偷偷下工夫了。

拜古哥幫忙,剛好找到如下討論串

參考網址:http://social.msdn.microsoft.com/Forums/en/transactsql/thread/f09d4166-2030-41fe-b86e-392fbc94db53

 

那麼就照網址內容依樣畫葫蘆,首先來建立TABLE吧

步驟1:


    [CITY] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
    [PRODUCT] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL,
    [STORE] [nvarchar](50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL
) ON [PRIMARY]

 

步驟2:在Reporting Service內新增一張報表,並且新增資料集,SQL語法則如下


        STUFF
        (
            (
             SELECT CAST(':' AS VARCHAR(MAX))+U.STORE
             FROM DAPON_TB AS U
             WHERE U.PRODUCT=G.PRODUCT                                                  
             
             FOR XML PATH('')
            )
            ,1
            ,1
            ,''
        ) AS STORES,G.STORE
    FROM DAPON_TB AS G

 

步驟3:如果資料集SQL沒下錯,就會像下圖一樣。

Server5

 

步驟4:請在工具箱拉一個矩陣到配置視窗上,並依照下圖方式將欄位資料放上

Server6

 

步驟5:完成後點預覽,即可看到結果,如下

Server7

 

結論:整個重點還是在如何把資料轉成如下圖長相,參考一下步驟2的SQL語法吧!

Server8