2016-12-07 151 views
0

考慮這個查詢:透視表返回所有空數據

SELECT * 
FROM (
    SELECT 
    userid, 
    FORMAT(datecreated, 'yyyy-MM') AS purchasemonth, 
    COALESCE(amount + tip, 0) AS amt 
    FROM invoice 
) AS SourceTable 

產生的輸出是這樣的:

enter image description here

並在其中我想每個月總結在這個支點查詢:

SELECT 
    userid, 
    COALESCE([2016-08-01], 0) AS [2016-08-01], 
    COALESCE([2016-09-01], 0) AS [2016-09-01] 
FROM (
    SELECT 
    userid, 
    FORMAT(datecreated, 'yyyy-MM') AS purchasemonth, 
    COALESCE(amount + tip, 0) AS amt 
    FROM invoice 
) AS SourceTable 
PIVOT 
(
    SUM(amt) 
    FOR purchasemonth IN ([2016-08-01], [2016-09-01]) 
) AS PivotTable 

它產生如下輸出:

enter image description here

在原始查詢的輸出中根本沒有NULL數據。 PIVOT查詢的輸出只是空數據(合併爲0)。但我無法弄清楚爲什麼PIVOT沒有按照我的預期總結數據。我期待在PIVOT輸出中沒有NULL數據。

如何解決查詢的行爲與預期相符?

回答

1

派生表PurchaseMonth字符串沒有它你與天就相對於一個日期的值/列名:

所以主問題是這一行:

FOR purchasemonth IN ([2016-08-01], [2016-09-01]) 

TO

FOR purchasemonth IN ([2016-08], [2016-09]) 

一旦你改變,你會需要改變COALESCE()語句太

,你應該得到你想要的。

SELECT 
    userid, 
    COALESCE([2016-08], 0) AS [2016-08-01], 
    COALESCE([2016-09], 0) AS [2016-09-01] 
FROM (
    SELECT 
    userid, 
    FORMAT(datecreated, 'yyyy-MM') AS purchasemonth, 
    COALESCE(amount + tip, 0) AS amt 
    FROM invoice 
) AS SourceTable 
PIVOT 
(
    SUM(amt) 
    FOR purchasemonth IN ([2016-08], [2016-09]) 
) AS PivotTable 

如果你想01保持了天,然後簡單地改變了Derived Table定義爲一個日期或包括在格式

所以,如果你想要走這條路改變這一行的日子:

FORMAT(datecreated, 'yyyy-MM') AS purchasemonth,

DATEADD(day,1-DAY(datecreated),datecreated) AS purchasemonth,

你也可以使用這個

FORMAT(datecreated, 'yyyy-MM-dd') AS purchasemonth,

FORMAT有,你沒有理由介紹,如果你並不需要性能的影響。

SELECT 
    userid, 
    COALESCE([2016-08-01], 0) AS [2016-08-01], 
    COALESCE([2016-09-01], 0) AS [2016-09-01] 
FROM (
    SELECT 
    userid, 
    DATEADD(day,1-DAY(datecreated),datecreated) AS purchasemonth, 
    COALESCE(amount + tip, 0) AS amt 
    FROM invoice 
) AS SourceTable 
PIVOT 
(
    SUM(amt) 
    FOR purchasemonth IN ([2016-08-01], [2016-09-01]) 
) AS PivotTable 
+1

這是令人尷尬的,這本質上只是我錯過了一個錯字。 tyvm。 – Jonah

相關問題