2011-08-22 101 views
6

如何透視日期爲月份的列?帶MONTH的樞軸()

例子:

數據:

|-----------------------------------| 
| def_kstnr | def_zeit | def_datum | 
|-----------------------------------| 
| 100  | 3.2  | 2011-11-02 | 
| 110  | 2.8  | 2011-02-03 | 
| 120  | 5.4  | 2011-11-04 | 
| 130  | 2.4  | 2011-08-05 | 
| 140  | 4.9  | 2011-09-06 | 
| 150  | 1.5  | 2011-10-07 | 
| 160  | 2.6  | 2011-12-08 | 
|-----------------------------------| 

查詢:

SELECT 
    def_kstnr, 
    [1] AS Jan, 
    [2] AS Feb, 
    [3] AS Mrz, 
    [4] AS Apr, 
    [5] AS Mai, 
    [6] AS Jun, 
    [7] AS Jul, 
    [8] AS Aug, 
    [9] AS Sep, 
    [10] AS Okt, 
    [11] AS Nov, 
    [12] AS Dez 
FROM 
    dbo.def 
PIVOT 
(
    SUM(def_zeit) 
    FOR MONTH(def_datum) 
    IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) 
) AS pvtMonth 
GROUP BY 
    dbo.def.def_kstnr, 
    MONTH(def_datum) 

我得到這個錯誤:

Incorrect syntax near '('.

(本着 「FOR MONTH(def_datum)」)

結果應該是這樣的:

|-----------------------------------------------------------------------------------| 
| def_kstnr | Jan | Feb | Mrz | Apr | Mai | Jun | Jul | Aug | Sep | Okt | Nov | Dez | 
|-----------------------------------------------------------------------------------| 
| 100  |  |  |  |  |  |  |  |  |  |  | 3.2 |  | 
| 110  |  | 2.8 |  |  |  |  |  |  |  |  |  |  | 
... 
|-----------------------------------------------------------------------------------| 

謝謝:)

回答

16

如果移動Month函數成PIVOT之前的可用源表格。請注意,我認爲你不需要按照主鍵進行分組。

SELECT 
    def_kstnr, 
    [1] AS Jan, 
    [2] AS Feb, 
    [3] AS Mrz, 
    [4] AS Apr, 
    [5] AS Mai, 
    [6] AS Jun, 
    [7] AS Jul, 
    [8] AS Aug, 
    [9] AS Sep, 
    [10] AS Okt, 
    [11] AS Nov, 
    [12] AS Dez 
FROM 
(Select 
def_kstnr, 
def_zeit, 
MONTH(def_datum) as TMonth 
    from 
    dbo.def) source 
PIVOT 
(
    SUM(def_zeit) 
    FOR TMonth 
    IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) 
) AS pvtMonth 
+0

非常感謝你,工作很好:) – Ueli

+0

好一@Xhalent。 –