2014-02-21 4 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

Сколько идентификаторов филиала существует? Было бы приемлемо, если бы все они были указаны в запросе? –

ответ

0

Это больше, чем шаблон решения, но я объясню.

В приведенной ниже инструкции вы устанавливаете агрегаты по ветке. Это даст вам первый шаг к вашему желаемому результату (первый желаемый результат в вашем сообщении), если вы запустили его самостоятельно в качестве собственного запроса (переименование и добавление всех столбцов оплаты).

Затем вы запускаете несколько запросов, связанных союзами, в которых вы указываете в качестве литерала столбец оплаты, для которого вы будете суммировать (вы должны ввести его как литерал, поэтому я использовал слово «литерал», чтобы проиллюстрировать каждый раз. Затем вы суммируете, одну строку на каждое поле платежа и столбец на каждую ветвь (через оператор case), агрегирует запрос из предложения в cl. Единственная причина, по которой я использую сумму аргумента case так что вы получите все # в одной строке для каждого поля выплаты.

У вас более 4 столбцов оплаты (как вы знаете), поэтому вам придется добавить еще несколько союзов, пока вы не закончите (и переименуйте все столбцы оплаты и идентификаторы филиалов на все, что они есть).

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

Смежные вопросы