Pages

Subscribe:

Ads 468x60px

Labels

2014年3月11日 星期二

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上面偷偷下工夫了。
拜古哥幫忙,剛好找到如下討論串

那麼就照網址內容依樣畫葫蘆,首先來建立TABLE吧
步驟1:
CREATE TABLE [dbo].[DAPON_TB](
    [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語法則如下
SELECT G.CITY,G.PRODUCT,
        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

沒有留言:

張貼留言