2015-09-25 22 views
0

我創建了一個選擇查詢,該查詢抽取我的分類帳數據並將其分組爲表格格式。使用嵌入式sql語句的數據透視表

select 
    chart.Uf_Mgr_PL_Line, 
    MONTH(ledger.trans_date) as trans_month, 
    chart.description, 
    sum(ledger.for_amount) 
From 
    ledger 
     inner join chart on ledger.acct=chart.acct 
Where 
    ledger.control_year = '2016' and chart.Uf_Mgr_PL_Line <> 0 
Group by 
    Uf_Mgr_PL_Line, 
    MONTH(ledger.trans_date), 
    chart.description 
Order by 
    Uf_Mgr_PL_Line 

這是數據:

PL_LINE trans_month description AMOUNT 
2  9    COGS  100 
2   7 COGS -50 
2   4 COGS -25 
3   9 Sales Returns - Other 200 
3   6 Sales Returns - Other 155 
3   5 Sales Returns - Other 30 
4   7 Sales Discounts 32 
4   4 Sales Discounts 400 
4   8 Sales Discounts 15 
4   5 Sales Discounts 35 
5   5 Price Protection Allowance 410 
5   6 Price Protection Allowance 22 
5   9 Price Protection Allowance 32 
5   4 Price Protection Allowance 44 
7   9 COGS - RMA Processing -5 
7  8 COGS - RMA Processing 78 
7  5 COGS - RMA Processing 2555 

所以,我需要這樣它看起來像這樣

PL_Line desc    4 5 6 7 8 9 10 11 12 1 2 3 
     2  Cogs    -25  -50 100 
     3  sales return-other  30 155  200 
     4  sales disc   400 35  32 15 

我一直試圖做一個支點查詢轉動此數據,但我認爲我的問題是與列標題部分

select * 
      From 
      ( select 
        chart.Uf_Mgr_PL_Line, 
        MONTH(ledger.trans_date) as [trans_month], 
        chart.description, 
        ledger.for_amount 
       From 
        ledger 
         inner join chart on ledger.acct=chart.acct 
       Where 
         ledger.control_year = '2016' and chart.Uf_Mgr_PL_Line <> 0 
      )AS s 
      Pivot 
      ( sum(amount) 
      for [trans_month] in (4,5,6,7,8,9,10,11,12,1,2,3) 
      )as pivot 

問題的一部分是我在for條件中的for語句中收到錯誤消息。

回答

1

嘗試把方括號中的數值的IN標準:

for [trans_month] in ([4],[5],[6],[7],[8],[9],[10],[11],[12],[1],[2],[3]) 

編輯:

要 「隱藏NULLS」,使用:

SELECT PL_Line,[description],ISNULL([4],0) AS [4],ISNULL([5], 0) AS [5], ... 

排序特別使用:

ORDER BY CASE WHEN PL_Line = 30 THEN 1 ELSE 2 END, PL_Line 
+0

感謝那些修正這個錯誤,我發現一對夫婦別人的,我有一些成果。 – DragonRider

+0

所以,現在的問題是,我可以: 1指定爲第一個col,PL_Line的排序,它從2-30在全部數據中,我希望它顯示爲30,2- 29 2 - 如何隱藏空值?用0還是空白? – DragonRider

+0

查看更新的答案 – AHiggins

1

SELECT *是不對的,你應該指定外選擇和數量列列應在方括號:

DECLARE @myTable TABLE(
     PL_LINE INT, trans_month INT, [description] VARCHAR(30), AMOUNT INT 
) 
INSERT INTO @myTable 
VALUES 
(2, 9, 'COGS', 100), 
(2, 7, 'COGS', -50), 
(2, 4, 'COGS', -25), 
(3, 9, 'Sales Returns - Other', 200), 
(3, 6, 'Sales Returns - Other', 155), 
(3, 5, 'Sales Returns - Other', 30), 
(4, 7, 'Sales Discounts', 32), 
(4, 4, 'Sales Discounts', 400), 
(4, 8, 'Sales Discounts', 15), 
(4, 5, 'Sales Discounts', 35), 
(5, 5, 'Price Protection Allowance', 410), 
(5, 6, 'Price Protection Allowance', 22), 
(5, 9, 'Price Protection Allowance', 32), 
(5, 4, 'Price Protection Allowance', 44), 
(7, 9, 'COGS - RMA Processing', -5), 
(7, 8, 'COGS - RMA Processing', 78), 
(7, 5, 'COGS - RMA Processing', 2555) 

    SELECT PL_Line,[description],[4],[5],[6],[7],[8],[9],[10],[11],[12],[1],[2],[3] FROM 
    (
    SELECT * FROM @myTable 
    ) AS t 
    PIVOT 
    (
     SUM(AMOUNT) 
     FOR [trans_month] IN ([4],[5],[6],[7],[8],[9],[10],[11],[12],[1],[2],[3]) 
    ) AS pvt 
+0

我會在第一個選擇語句中放入我想調用頭部而不是4的頭部嗎? Like SELECT PL_Line,[description],[4]'2016年4月',[5]'2016年5月'... 但是仍然參考[4],[5] ...在數據透視部分? – DragonRider