2014-10-30 23 views
0

我已經創建了兩個sql查詢,12個月的第一個總數和12個月的第二個總和值。我試圖將這些合併成一個查詢,但不管我嘗試它的錯誤。試圖加入兩個數據透視SQL查詢

期望輸出在一行上是24列,例如, Jan,JanQty,Feb,FebQty,Mar,MarQty等

任何幫助都會很棒!

首先查詢(數量):

SELECT 
SUM(JanQty) as 'JanQty', 
SUM(FebQty) as 'FebQty', 
SUM(MarQty) as 'MarQty', 
SUM(AprQty) as 'AprQty', 
SUM(MayQty) as 'MayQty', 
SUM(JuneQty) as 'JuneQty', 
SUM(JulyQty) as 'JulyQty', 
SUM(AugQty) as 'AugQty', 
SUM(SeptQty) as 'SeptQty', 
SUM(OctQty) as 'OctQty', 
SUM(NovQty) as 'NovQty', 
SUM(DecQty) as 'DecQty' 
from (

SELECT 
ISNULL([1],0) as JanQty, 
ISNULL([2],0) as FebQty, 
ISNULL([3],0) as MarQty, 
ISNULL([4],0) as AprQty, 
ISNULL([5],0) as MayQty, 
ISNULL([6],0) as JuneQty, 
ISNULL([7],0) as JulyQty, 
ISNULL([8],0) as AugQty, 
ISNULL([9],0) as SeptQty, 
ISNULL([10],0) as OctQty, 
ISNULL([11],0) as NovQty, 
ISNULL([12],0) as DecQty 
from 
(select SUM(T0.Quantity) as QtyBal, 
MONTH(T1.DocDate) as Month 
from INV1 T0 
inner join OINV T1 on t0.DocEntry = t1.DocEntry 
where t1.DocDate BETWEEN '20140101' AND '20141231' and 
year(T1.DocDate) = 2014 
group by t0.Quantity, t1.DocDate) s 

Pivot 
(SUM(QtyBal) FOR Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) p 

Union ALL 

SELECT 
ISNULL([1],0) as JanQty, 
ISNULL([2],0) as FebQty, 
ISNULL([3],0) as MarQty, 
ISNULL([4],0) as AprQty, 
ISNULL([5],0) as MayQty, 
ISNULL([6],0) as JuneQty, 
ISNULL([7],0) as JulyQty, 
ISNULL([8],0) as AugQty, 
ISNULL([9],0) as SeptQty, 
ISNULL([10],0) as OctQty, 
ISNULL([11],0) as NovQty, 
ISNULL([12],0) as DecQty 
from 
(select SUM(-T0.Quantity) as QtyBal, 
MONTH(T1.DocDate) as Month 
from RIN1 T0 
inner join ORIN T1 on t0.DocEntry = t1.DocEntry 
where t1.DocDate BETWEEN '20140101' AND '20141231' and 
year(T1.DocDate) = 2014 
group by -t0.Quantity, t1.DocDate) s 

Pivot 
(SUM(QtyBal) FOR Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) p 

) sq 

第二個查詢(價值):

SELECT 
SUM(Jan) as 'Jan', 
SUM(Feb) as 'Feb', 
SUM(Mar) as 'Mar', 
SUM(Apr) as 'Apr', 
SUM(May) as 'May', 
SUM(June) as 'June', 
SUM(July) as 'July', 
SUM(Aug) as 'Aug', 
SUM(Sept) as 'Sept', 
SUM(oct) as 'Oct', 
SUM(nov) as 'Nov', 
SUM(Dec) as 'Dec' 
from (

SELECT 
ISNULL([1],0) as Jan, 
ISNULL([2],0) as Feb, 
ISNULL([3],0) as Mar, 
ISNULL([4],0) as Apr, 
ISNULL([5],0) as May, 
ISNULL([6],0) as June, 
ISNULL([7],0) as July, 
ISNULL([8],0) as Aug, 
ISNULL([9],0) as Sept, 
ISNULL([10],0) as Oct, 
ISNULL([11],0) as Nov, 
ISNULL([12],0) as Dec 
from 
(select SUM(T0.LineTotal) as Bal, 
MONTH(T1.DocDate) as Month 
from INV1 T0 
inner join OINV T1 on t0.DocEntry = t1.DocEntry 
where t1.DocDate BETWEEN '20140101' AND '20141231' and 
year(T1.DocDate) = 2014 
group by t0.LineTotal, t1.DocDate) s 

Pivot 
(SUM(Bal) FOR Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) p 

Union ALL 

SELECT 
ISNULL([1],0) as Jan, 
ISNULL([2],0) as Feb, 
ISNULL([3],0) as Mar, 
ISNULL([4],0) as Apr, 
ISNULL([5],0) as May, 
ISNULL([6],0) as June, 
ISNULL([7],0) as July, 
ISNULL([8],0) as Aug, 
ISNULL([9],0) as Sept, 
ISNULL([10],0) as Oct, 
ISNULL([11],0) as Nov, 
ISNULL([12],0) as Dec 
from 
(select SUM(-T0.LineTotal) as Bal, 
MONTH(T1.DocDate) as Month 
from RIN1 T0 
inner join ORIN T1 on t0.DocEntry = t1.DocEntry 
where t1.DocDate BETWEEN '20140101' AND '20141231' and 
year(T1.DocDate) = 2014 
group by -t0.LineTotal, t1.DocDate) s 

Pivot 
(SUM(Bal) FOR Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) p 

) sq 
+0

歡迎堆棧溢出!我們很高興有你,我們非常感謝你提供的完整的代碼示例,以及標識你的RDBMS平臺的標籤。你還可以點擊'編輯'按鈕,幷包含一些你想要你的輸出看起來像什麼更多的細節?你希望有二十四列兩行,還是十二列四行? – AHiggins 2014-10-30 16:52:13

回答

0

嘗試使用CROSS JOIN:

SELECT 
    Jan, 
    JanQty 
FROM 
    (
    SELECT 
     SUM(JanQty) as 'JanQty', 
     SUM(FebQty) as 'FebQty', 
     SUM(MarQty) as 'MarQty', 
     SUM(AprQty) as 'AprQty', 
     SUM(MayQty) as 'MayQty', 
     SUM(JuneQty) as 'JuneQty', 
     SUM(JulyQty) as 'JulyQty', 
     SUM(AugQty) as 'AugQty', 
     SUM(SeptQty) as 'SeptQty', 
     SUM(OctQty) as 'OctQty', 
     SUM(NovQty) as 'NovQty', 
     SUM(DecQty) as 'DecQty' 
    FROM 
     (
     SELECT 
      ISNULL([1],0) as JanQty, 
      ISNULL([2],0) as FebQty, 
      ISNULL([3],0) as MarQty, 
      ISNULL([4],0) as AprQty, 
      ISNULL([5],0) as MayQty, 
      ISNULL([6],0) as JuneQty, 
      ISNULL([7],0) as JulyQty, 
      ISNULL([8],0) as AugQty, 
      ISNULL([9],0) as SeptQty, 
      ISNULL([10],0) as OctQty, 
      ISNULL([11],0) as NovQty, 
      ISNULL([12],0) as DecQty 
     FROM 
      (
      SELECT 
       SUM(T0.Quantity) as QtyBal, 
       MONTH(T1.DocDate) as Month 
      FROM 
       INV1 T0 
       inner join 
       OINV T1 on t0.DocEntry = t1.DocEntry 
      WHERE 
       t1.DocDate BETWEEN '20140101' AND '20141231' and 
       year(T1.DocDate) = 2014 
      GROUP BY t0.Quantity, t1.DocDate 
     ) s 

     PIVOT 
      (
      SUM(QtyBal) FOR 
      Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
     ) p 

     UNION ALL 

     SELECT 
      ISNULL([1],0) as JanQty, 
      ISNULL([2],0) as FebQty, 
      ISNULL([3],0) as MarQty, 
      ISNULL([4],0) as AprQty, 
      ISNULL([5],0) as MayQty, 
      ISNULL([6],0) as JuneQty, 
      ISNULL([7],0) as JulyQty, 
      ISNULL([8],0) as AugQty, 
      ISNULL([9],0) as SeptQty, 
      ISNULL([10],0) as OctQty, 
      ISNULL([11],0) as NovQty, 
      ISNULL([12],0) as DecQty 
     from 
      (
      select 
       SUM(-T0.Quantity) as QtyBal, 
       MONTH(T1.DocDate) as Month 
      from 
       RIN1 T0 
       inner join 
       ORIN T1 on t0.DocEntry = t1.DocEntry 
      where 
       t1.DocDate BETWEEN '20140101' AND '20141231' and 
       year(T1.DocDate) = 2014 
      group by -t0.Quantity, t1.DocDate) s 

      Pivot 
       (
       SUM(QtyBal) FOR 
       Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
      ) p 
    ) sqa 
) qty 
    CROSS JOIN 
    (
    SELECT 
     SUM(Jan) as 'Jan', 
     SUM(Feb) as 'Feb', 
     SUM(Mar) as 'Mar', 
     SUM(Apr) as 'Apr', 
     SUM(May) as 'May', 
     SUM(June) as 'June', 
     SUM(July) as 'July', 
     SUM(Aug) as 'Aug', 
     SUM(Sept) as 'Sept', 
     SUM(oct) as 'Oct', 
     SUM(nov) as 'Nov', 
     SUM(Dec) as 'Dec' 
    FROM 
     (
     SELECT 
      ISNULL([1],0) as Jan, 
      ISNULL([2],0) as Feb, 
      ISNULL([3],0) as Mar, 
      ISNULL([4],0) as Apr, 
      ISNULL([5],0) as May, 
      ISNULL([6],0) as June, 
      ISNULL([7],0) as July, 
      ISNULL([8],0) as Aug, 
      ISNULL([9],0) as Sept, 
      ISNULL([10],0) as Oct, 
      ISNULL([11],0) as Nov, 
      ISNULL([12],0) as Dec 
     FROM 
      (
      SELECT 
       SUM(T0.LineTotal) as Bal, 
       MONTH(T1.DocDate) as Month 
      FROM 
       INV1 T0 
       inner join 
       OINV T1 on t0.DocEntry = t1.DocEntry 
      WHERE 
       t1.DocDate BETWEEN '20140101' AND '20141231' and 
       year(T1.DocDate) = 2014 
      GROUP BY t0.LineTotal, t1.DocDate 
     ) s 

     PIVOT 
      (
      SUM(Bal) FOR 
      Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
     ) p 

     UNION ALL 

     SELECT 
      ISNULL([1],0) as Jan, 
      ISNULL([2],0) as Feb, 
      ISNULL([3],0) as Mar, 
      ISNULL([4],0) as Apr, 
      ISNULL([5],0) as May, 
      ISNULL([6],0) as June, 
      ISNULL([7],0) as July, 
      ISNULL([8],0) as Aug, 
      ISNULL([9],0) as Sept, 
      ISNULL([10],0) as Oct, 
      ISNULL([11],0) as Nov, 
      ISNULL([12],0) as Dec 
     from 
      (
      select 
       SUM(-T0.LineTotal) as Bal, 
       MONTH(T1.DocDate) as Month 
      from 
       RIN1 T0 
       inner join 
       ORIN T1 on t0.DocEntry = t1.DocEntry 
      where 
       t1.DocDate BETWEEN '20140101' AND '20141231' and 
       year(T1.DocDate) = 2014 
      group by -t0.LineTotal, t1.DocDate 
     ) s 

     Pivot 
      (
      SUM(Bal) FOR 
      Month IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
     ) p 
    ) sqb 
) Bal