簡體   English   中英

SSRS 2005中的多行總計

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM