2016-12-01 61 views
1

這就是表看起來像「正常」WITH ROLLUP只能產生空值

WorkloadCategory | WorkloadCapacity| WorkloadTotalTime 
-----------------|-----------------|------------------ 
DI    | 317632   | 239.92 
DI    | 106706   | 32.45 
DI    | 35840   | 27.77 
DI    | 50000   | 48.07 
DI    | 8000   | 9.18 
DI    | 29120   | 15.71 
DI    | 0    | 0 

使用下面的查詢:

SELECT 
    wlc.WorkloadCategory, 
    wl.WorkloadCapacity, 
    ROUND(wl.WorkloadMinutes * wl.WorkloadCapacity/60/assum.WorkYearHours, 2) AS WorkloadTotalTime 
FROM 
    swam.Assumptions assum 
CROSS JOIN 
    swam.WorkloadCategories wlc 
INNER JOIN 
    swam.Workloads wl ON wlc.WorkloadCategoryID = wl.WorkloadCategoryID 
ORDER BY 
    wlc.WorkloadCategory 

我想要做的就是簡單地總結了兩列WorkloadCapacityWorkloadTotalTime,並在表格底部有一個新行,顯示每列的總和。

我希望某些列是NULL,因爲這是ROLLUP的工作方式,是的,我知道如果我想要的話,我需要指定列名稱來讀取'Total'....但是我不明白爲什麼從ROLLUP的款項甚至沒有顯示出來的。

我試圖用類似GROUP BY GROUPING SET(像什麼的),從這個網站的其他崗位的東西,但它並沒有解決我遇到的問題。

SELECT 
    wlc.WorkloadCategory, 
    ROUND(wl.WorkloadMinutes * wl.WorkloadCapacity/60/assum.WorkYearHours, 2) AS WorkloadTotalTime 
FROM 
    swam.Assumptions assum 
CROSS JOIN 
    swam.WorkloadCategories wlc 
INNER JOIN 
    swam.Workloads wl ON wlc.WorkloadCategoryID = wl.WorkloadCategoryID 
GROUP BY 
    wlc.WorkloadCategory, wl.WorkloadCapacity, 
    assum.WorkYearHours, wl.WorkloadMinutes WITH ROLLUP 

輸出表只是NULLS的全部!

WorkloadCategory | WorkloadCapacity | WorkloadTotalTime 
DI    | 0    | 0 
DI    | 0    | NULL 
DI    | 0    | NULL 
DI    | 8000    | 9.18 
DI    | 8000    | NULL 
DI    | 8000    | NULL 
DI    | 29120   | 15.71 
DI    | 29120   | NULL 
DI    | 29120   | NULL 
DI    | 35840   | 27.77 
DI    | 35840   | NULL 
DI    | 35840   | NULL 
DI    | 50000   | 48.07 
DI    | 50000   | NULL 
DI    | 50000   | NULL 
DI    | 106706   | 32.45 
DI    | 106706   | NULL 
DI    | 106706   | NULL 
DI    | 317632   | 239.92 
DI    | 317632   | NULL 
DI    | 317632   | NULL 
DI    | NULL    | NULL 

預先感謝任何幫助,您可以提供。

回答

1

您與彙總是不工作,因爲你告訴查詢,以小組每個號碼字段類別,但你也沒有告訴它如何總結總量。此外,WITH ROLLUP將在4個字段中的每個字段中滾動,但這不是您想要的。你最後只有一個總數(也許每個類別總數),所以通過GROUPING SETS,你可以告訴它你想要什麼。

事情是這樣的:

SELECT 
    wlc.WorkloadCategory, 
    SUM(wl.WorkloadCapacity) AS WorkloadCapacity, 
    SUM(ROUND(wl.WorkloadMinutes * wl.WorkloadCapacity/60/assum.WorkYearHours, 2)) AS WorkloadTotalTime 
FROM 
    swam.Assumptions assum 
CROSS JOIN 
    swam.WorkloadCategories wlc 
INNER JOIN 
    swam.Workloads wl ON wlc.WorkloadCategoryID = wl.WorkloadCategoryID 
GROUP BY GROUPING SETS (
    (wlc.WorkloadCategory, wl.WorkloadCapacity, assum.WorkYearHours, wl.WorkloadMinutes), 
    (wlc.WorkloadCategory), 
() 
) 
+0

非常感謝你的幫助! – blacksaibot