我在DB2上工作,但我剛剛看了一下,在一個Oracle手動,它看起來非常接近DB2在這方面,這個查詢應該讓你很接近終點線,但它暴露3個結果列,其中Sum_Earnings表示所有部門的部門總數,人員總數或總計s,具體取決於總和記錄類型(GROUPING函數用於確定您正在處理的總行的哪個級別)。如果你真的需要它(提示:分組功能),只需稍作調整,你就可以把它變成暴露4個結果列。
select decode(grouping(D.DepartmentName), 1, 'All Departments', D.DepartmentName)
as Department
,decode(grouping(P.Surname), 1, 'All Persons', P.Surname) as Person_Surname
,sum(E.EarningValue) as Sum_Earnings
from Departments D
join People P
on P.DepartmentID = D.DepartmentID
join Earnings E
on E.PersonID = P.PersonID
group by rollup(D.DepartmentName, P.Surname)
order by grouping(D.DepartmentName), Department, grouping(P.Surname), Person_Surname
因爲CUBE,ROLLUP和GROUPING SETS可以用代碼體積小得多執行這些任務,他們真的去因爲有少做一個編碼錯誤(一旦你換你的頭的機會的方式如果你正在製作這樣的總結報告,通過允許數據庫執行所有的總結工作,你可能會獲得更好的性能(與將詳細信息行讀入計算總計的程序相反)攪動細節行 - 唉)。
它通常需要我幾個試圖獲得行排序和這些類型的查詢總標籤正確,因爲我不經常這樣做(很少在近幾年的報道工作),所以希望我沒有軟管那個。
你正在使用什麼sql server版本? – sqlhdv
我使用oracle 12c –
我有查詢選擇我需要的一切,但兩個總和值是在一列而不是兩個。臨時我展示部門和人員的ID。 SELECT DepartmentID,People.PersonID,SUM(EarningValue)AS SumEarnings FROM People JOIN Earnings ON People.PersonID = Earnings.PersonID GROUP BY GROUPING SETS(DepartmentID,People.PersonID); –