[英]Multiple row totals in SSRS 2005
我正在使用SSRS 2005創建報告以顯示不同類別的小時總和(Reg Hours,加班等)。
SELECT OGL.PACostCenter, vpt.LL6, sum((vpt.timeinseconds*1.0)/3600) [Hours]
FROM totals as vpt
INNER JOIN OracleLookup OGL on vpt.LL6 = OGL.OracleCostCenter COLLATE SQL_Latin1_General_CP1_CI_AI
WHERE vpt.DATE BETWEEN @StartDate AND @EndDate
AND vpt.PAYCODENAME in ('519-H-Overtime 1.0',
'519-H-Holiday OT 1.5',
'519-H-Overtime 1.5',
'519-H-Overtime 2.0',
'519-H-Regular')
GROUP BY OGL.PayrollAccount, vpt.LL6
ORDER BY OGL.PayrollAccount, vpt.LL6
我有總的小時數,但也希望能夠將其細分,並只有加班,只有固定的小時數以及所有內容的總和。 有沒有簡單/干凈的方法可以做到這一點,任何人都知道嗎? 我嘗試使用不同的數據集,但是它沒有達到我的預期,並且像子查詢這樣的東西看起來真的很凌亂和多余。
是的,您可以使用條件求和:
SELECT OGL.PACostCenter, vpt.LL6, sum((vpt.timeinseconds*1.0)/3600) [Hours],
sum(case when vpt.PAYCODENAME in ('519-H-Overtime 1.0', '519-H-Holiday OT 1.5',
'519-H-Overtime 1.5', '519-H-Overtime 2.0'
)
then (vpt.timeinseconds*1.0)/3600
else 0
end) as OvertimeHours,
sum(case when vpt.PAYCODENAME in ('519-H-Regular')
then (vpt.timeinseconds*1.0)/3600
else 0
end) as RegularHours,
FROM totals as vpt
INNER JOIN OracleLookup OGL on vpt.LL6 = OGL.OracleCostCenter COLLATE SQL_Latin1_General_CP1_CI_AI
WHERE vpt.DATE BETWEEN @StartDate AND @EndDate
AND vpt.PAYCODENAME in ('519-H-Overtime 1.0',
'519-H-Holiday OT 1.5',
'519-H-Overtime 1.5',
'519-H-Overtime 2.0',
'519-H-Regular')
GROUP BY OGL.PayrollAccount, vpt.LL6
ORDER BY OGL.PayrollAccount, vpt.LL6;
假設您可以控制該數據集查詢,則應該可以執行以下操作:
SELECT OGL.PACostCenter, vpt.LL6
, sum((vpt.timeinseconds*1.0)/3600) [Hours] -- your initial total
, sum(case when vpt.PAYCODENAME = '519-H-Overtime 1.0'
then vpt.timeinseconds*1.0 else null end) / 3600 [OT1]
, sum(case when vpt.PAYCODENAME = '519-H-Overtime 1.5'
then vpt.timeinseconds*1.0 else null end) / 3600 [OT1pt5]
-- further SUM/CASE as required
FROM totals as vpt
INNER JOIN OracleLookup OGL on vpt.LL6 = OGL.OracleCostCenter COLLATE SQL_Latin1_General_CP1_CI_AI
WHERE vpt.DATE BETWEEN @StartDate AND @EndDate
AND vpt.PAYCODENAME in ('519-H-Overtime 1.0',
'519-H-Holiday OT 1.5',
'519-H-Overtime 1.5',
'519-H-Overtime 2.0',
'519-H-Regular')
GROUP BY OGL.PayrollAccount, vpt.LL6
ORDER BY OGL.PayrollAccount, vpt.LL6
即將SUM
應用於CASE
語句,以提取所需的組。
因為您使用的是SSRS,所以我建議您這樣做
SELECT OGL.PACostCenter, vpt.PAYCODENAME, vpt.LL6, sum((vpt.timeinseconds*1.0)/3600) [Hours]
FROM totals as vpt
INNER JOIN OracleLookup OGL on vpt.LL6 = OGL.OracleCostCenter COLLATE SQL_Latin1_General_CP1_CI_AI
WHERE vpt.DATE BETWEEN @StartDate AND @EndDate
AND vpt.PAYCODENAME in ('519-H-Overtime 1.0',
'519-H-Holiday OT 1.5',
'519-H-Overtime 1.5',
'519-H-Overtime 2.0',
'519-H-Regular')
GROUP BY OGL.PayrollAccount, vpt.PAYCODENAME, vpt.LL6
ORDER BY OGL.PayrollAccount, vpt.LL6
這會為您提供每種類型(常規,加班等)的總計,然后在報告中創建總計
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.