2016-03-08 46 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()结果 –

相关问题