2014-02-21 79 views
0

你好我已经困在这里了一个星期...... 说我有这样的结果我的查询..的Sql枢纽报表

 
Branch Pay1 Pay2 Pay3 Pay4 
Branch1 100 100 100 100 
Branch1 150 150 150 150 
Branch2 200 200 200 200 
Branch3 200 200 200 200 

我想让这样的事情

 
Branch Pay1 Pay2 Pay3 Pay4 
Branch1 250 250 250 250 
Branch2 200 200 200 200 
Branch3 200 200 200 200 

而最后的结果是这样的

 
Item Branch1 Branch2 Branch3 
pay1 250  200  200 
pay2 250  200  200 
pay3 250  200  200  
pay4 250  200  200 

希望你能帮助我做this..thanks很多..

顺便说一下,这是我的query..for第一个结果

Select distinct 
    --pr_employees.Fullname as Name 
    --, 
    PR_Employees.BranchID,PR_payroll.BasicPay as [BasicPay] 
    ,PR_Empearnings.EarningAmt 
    ,PR_Earnings.Description 
    ,pr_payroll.Overtime 
    ,pr_payroll.Period 
    ,Pr_payroll.SundayOT as [Sunday OT] 
    ,Pr_Payroll.PaidHol as [Paid Hol] 
    ,pr_payroll.ThirteenthMonthPay as [Thirteen MO] 
    ,pr_payroll.Grosspay as [Gross Amount] 
    ,pr_payroll.WithHoldingTax as [WithTax] 
    ,pr_payroll.SSSPremium as [SSS Cont] 
    ,pr_payroll.SSSLoan as [SSS Loan] 
    ,pr_payroll.PagibigPremium as [Pagibig Cont] 
    ,pr_payroll.PagibigLoan as [Pagibig Loan] 
    ,pr_payroll.NHIPPremium as Medicare 
    ,pr_payroll.TotalDeductions as [Total Ded] 
    ,pr_Payroll.netpay as [Net with OD] 
    ,pr_payroll.netnoOd as [Net no OD] 
    ,prchargesAdvances.Credit 
    ,prchargesadvancesTypes.ChargesTypeName 
from pr_employees 
    left join pr_payroll on PR_Employees.EmpID=PR_Payroll.EmpID 
    left join PR_EmpEarnings on PR_Payroll.EmpID=PR_EmpEarnings.EmpID 
    left join PR_Earnings on PR_EmpEarnings.EarningId=pr_earnings.earningid 
    left join PR_Overtime on PR_Overtime.EmpID=PR_Payroll.EmpID 
    left join PRChargesAdvances on PRChargesAdvances.transactiondate=pr_payroll.period 
    and prchargesadvances.empid=pr_payroll.empid 
    left join PRChargesAdvancesTypes on PRChargesAdvances.ChargeTypeID=PRChargesAdvancesTypes.ChargesTypeID 
where PR_Payroll.Period='8/31/2013' 
+0

你运行了什么查询来获得该结果? (请粘贴sql) –

+0

我已经发布了我的查询..但这仅仅是第一个结果 – user3312649

+0

存在多少个分支ID?如果必须在查询中指定它们全部,它是可以接受的吗? –

回答

0

这是一个多解决方案模板,但我会解释。

在下面的with子句中,您正在按分支建立聚合。如果您将其作为自己的查询单独运行(重命名并添加所有薪酬列),这将使您向期望的输出(您的文章中第一个期望的结果集)迈出第一步。

然后,您运行几个通过联合连接的查询,您在其中指定了要汇总的支付列的字面值(您必须将其作为文字键入,这就是为什么我使用“literal”然后总结一下,每个支付字段和每个分支的列(通过一个case语句),来自在with子句中查询的总和。我使用case语句总和的唯一原因这样你就可以在同一行上为每个支付字段获得所有#

你有超过4个支付列(如你所知),所以你必须添加更多的工会,直到你完成(和将所有的支付列和分支ID重命名为任何它们)

with sub as 
(select branch, 
     sum(pay1) as sum_py1 sum(pay2) as sum_py2 sum(pay3) as sum_py3 sum(pay4) as sum_py4 
    from bunchoftbls 
    where PR_Payroll.Period = '8/31/2013' 
    group by branch) 
select 'Pay1 literal' 
     , sum(case when branch = 'Branch1' then sum_py1 else 0 end) as branch1 
     , sum(case when branch = 'Branch2' then sum_py1 else 0 end) as branch2 
     , sum(case when branch = 'Branch3' then sum_py1 else 0 end) as branch3 
     , sum(case when branch = 'Branch4' then sum_py1 else 0 end) as branch4 
     , sum(case when branch = 'Branch5' then sum_py1 else 0 end) as branch5 
     , sum(case when branch = 'Branch6' then sum_py1 else 0 end) as branch6 
from sub 
union all 
select 'Pay2 literal' 
     , sum(case when branch = 'Branch1' then sum_py2 else 0 end) as branch1 
     , sum(case when branch = 'Branch2' then sum_py2 else 0 end) as branch2 
     , sum(case when branch = 'Branch3' then sum_py2 else 0 end) as branch3 
     , sum(case when branch = 'Branch4' then sum_py2 else 0 end) as branch4 
     , sum(case when branch = 'Branch5' then sum_py2 else 0 end) as branch5 
     , sum(case when branch = 'Branch6' then sum_py2 else 0 end) as branch6 
from sub 
union all 
select 'Pay3 literal' 
     , sum(case when branch = 'Branch1' then sum_py3 else 0 end) as branch1 
     , sum(case when branch = 'Branch2' then sum_py3 else 0 end) as branch2 
     , sum(case when branch = 'Branch3' then sum_py3 else 0 end) as branch3 
     , sum(case when branch = 'Branch4' then sum_py3 else 0 end) as branch4 
     , sum(case when branch = 'Branch5' then sum_py3 else 0 end) as branch5 
     , sum(case when branch = 'Branch6' then sum_py3 else 0 end) as branch6 
from sub 
union all 
select 'Pay4 literal' 
     , sum(case when branch = 'Branch1' then sum_py4 else 0 end) as branch1 
     , sum(case when branch = 'Branch2' then sum_py4 else 0 end) as branch2 
     , sum(case when branch = 'Branch3' then sum_py4 else 0 end) as branch3 
     , sum(case when branch = 'Branch4' then sum_py4 else 0 end) as branch4 
     , sum(case when branch = 'Branch5' then sum_py4 else 0 end) as branch5 
     , sum(case when branch = 'Branch6' then sum_py4 else 0 end) as branch6 
from sub 
+0

嗯,我认为这会让程序变慢。 – user3312649