2014-09-03 30 views
0

我想創建連接一個表與自己。因此,例如,在桌子底下,基於D(借)和C(積分)的總和,但是我需要與其自己一起加入表格以添加顯示「D」項和「C」的計數的附加列以及另外兩個附加列顯示總數和總數。如何加入下表以創建附加列?SQL Server:連接兩個數據透視表

輸入表

GL_BU GL_Source GL_JE_Type   GL_Amount Amount_Prefix 
------------------------------------------------------------------ 
202  Payables Purchase Invoices  1234    C 
202  Payables Purchase Invoices   123    D 
202  Inventory Inventory     123    C 
202  Payables Purchase Invoices  1234    C 

輸出表

GL_BU GL_Source GL_JE_Type Amount D Amount C Count D Count C Total Count Total Amount 
------------------------------------------------------------------------------------------ 
202 Spreadsheet XXXXX   1234  123   1  1   2  1357 
202 Manual  XXXXX   1234  123   2  2   4  1357 
202 Manual  XXXXX   1234  123   1  1   2  1357 
202 Inventory XXXXX   1234  123   4  4   8  1357 
202 Sales Order XXXXXX  1234  123   1  1   2  1357 

目前代碼

SELECT * 
    FROM 
      (SELECT 
        [GL_Business_Unit] 
        ,[GL_Source] 
        ,[GL_JE_Type] 
        ,([GL_Amount]) 
        ,[Amount_Prefix] 
       FROM [03_rdm].[table_2013]) as t 
       Pivot(SUM([GL_Amount]) 
       FOR [Amount_Prefix] IN (D,C)) AS pvt1 

當前代碼在SQLFiddle鏈路http://sqlfiddle.com/#!3/92369/2

+0

嗯,任何你可以發佈你的表格結構,樣品數據,然後得到最終的結果?甚至創建一個http://sqlfiddle.com/與它? – Taryn 2014-09-03 13:52:17

+0

Ive jsut更新了樣本輸入和期望的輸出 – Calgar99 2014-09-03 14:15:34

回答

2

你的樣本數據做不符合你想要的結果,所以我猜這就是你需要的。你可以使用PIVOT得到結果,但似乎這會容易得多此使用聚合函數和一些有條件的邏輯通過CASE表達式得到:

select 
    GL_BU, 
    GL_Source, 
    GL_JE_Type, 
    sum(case when Amount_Prefix = 'D' then GL_Amount else 0 end) Amount_D, 
    sum(case when Amount_Prefix = 'C' then GL_Amount else 0 end) Amount_C, 
    sum(case when Amount_Prefix = 'D' then 1 else 0 end) Count_D, 
    sum(case when Amount_Prefix = 'C' then 1 else 0 end) Count_C, 
    count(*) TotalCount, 
    sum(GL_Amount) TotalAmount 
from table_2013 
group by GL_BU, GL_Source, GL_JE_Type; 

SQL Fiddle with Demo

+0

這是一個更簡單的方法。 Thnak你。 – Calgar99 2014-09-03 15:01:14