2016-03-08 49 views
-1

我有一個表t1,我想按年,月找出少數幾列的總和。如何將兩個不同表中的兩條select語句顯示爲一個包含列的表單

SELECT 
     SUM(SA) as SA, 
     SUM(TM) as TM, 
     SUM(ST) as ST  
    FROM t1 
GROUP BY YEAR(createdDate), MONTH(createdDate) 
ORDER BY YEAR(createdDate), MONTH(createdDate) 

第二工作臺T2是

SELECT 
     SUM(BA) as BA, 
     SUM(TR) as TR 
    FROM t2 
GROUP BY YEAR(createdDate), MONTH(createdDate) 
ORDER BY YEAR(createdDate), MONTH(createdDate) 

輸出爲各表是

表1

76.45 416.51 2484.89 
80.28 296.18 1909.83 
78.57 342.27 4798.71 

表2

1924.9 0 
1689.85 0 
4608.69 0 

但我想作爲一個單一的表來表示作爲

76.45 416.51 2484.89 1924.9 0 
80.28 296.18 1909.83 1689.85 0 
78.57 342.27 4798.71  4608.69 0 

我沒有join.So共同的專欄中,我所要做的,而不加入

+0

發生了什麼事的年份和月份列?你是否把它從樣本中排除 - 或者爲什麼'YEAR(createdDate),MONTH(createdDate)'這個列如果列不重要? –

回答

1

我不相信你例子是完整的,你可能不需要一個FULL OUTER JOIN,但直到更多的已知,這將足夠。問題的關鍵是你有兩個年份和月份爲共同

SELECT 
     coalesce(a.yr,b.yr) yr 
    , coalesce(a.mn, b.mn) mn 
    , a.SA, a.TM, a.ST, b.BA, b.TR 
FROM (
     SELECT 
      YEAR(createdDate) yr 
      , MONTH(createdDate) mn 
      , SUM(SA) AS SA 
      , SUM(TM) AS TM 
      , SUM(ST) AS ST 
     FROM t1 
     GROUP BY 
      YEAR(createdDate) 
      , MONTH(createdDate) 
    ) a 
     FULL OUTER JOIN (
      SELECT 
        YEAR(createdDate) yr 
       , MONTH(createdDate) mn 
       , SUM(BA) AS BA 
       , SUM(TR) AS TR 
      FROM t2 
      GROUP BY 
        YEAR(createdDate) 
       , MONTH(createdDate) 
    ) b ON a.yr = b.yr 
        AND a.mn = b.mn 

另一種可能的潛在列是您篩選的是特定的日期範圍(比如2014年,2015年和2016年),你知道有兩個表中的數據所有這些年月,讓您的使用INNER JOIN

SELECT 
     a.yr, a.mn 
    , a.SA, a.TM, a.ST, b.BA, b.TR 
FROM (
     SELECT 
      YEAR(createdDate) yr 
      , MONTH(createdDate) mn 
      , SUM(SA) AS SA 
      , SUM(TM) AS TM 
      , SUM(ST) AS ST 
     FROM t1 
     where somedatecolumn >= '20140101' and somedatecolumn < '20170101' 
     GROUP BY 
      YEAR(createdDate) 
      , MONTH(createdDate) 
    ) a 
     INNER JOIN (
      SELECT 
        YEAR(createdDate) yr 
       , MONTH(createdDate) mn 
       , SUM(BA) AS BA 
       , SUM(TR) AS TR 
      FROM t2 
      where somedatecolumn >= '20140101' and somedatecolumn < '20170101' 
      GROUP BY 
        YEAR(createdDate) 
       , MONTH(createdDate) 
    ) b ON a.yr = b.yr 
        AND a.mn = b.mn 
-2
SELECT YEAR(createdDate) cYear, MONTH(createdDate) cDate, 
    SUM(SA) as SA, 
    SUM(TM) as TM, 
    SUM(ST) as ST, 
    T.BA,T.TR  
FROM t1 LEFT JOIN (SELECT YEAR(createdDate) cYear, MONTH(createdDate) cDate, 
    SUM(BA) as BA, 
    SUM(TR) as TR 
FROM t2 GROUP BY YEAR(createdDate), MONTH(createdDate))T ON .cYear=YEAR(t1.createdDate) AND T.cDate=MONTH(t1.createdDate) GROUP BY YEAR(t1.createdDate), MONTH(t1.createdDate),T.BA,T.TR ORDER BY YEAR(t1.createdDate), MONTH(t1.createdDate) 
+0

桌子的笛卡爾積? (t1行多行t2行) - 你不會得到相同的SUM()結果 –

相關問題