【问题标题】:Combine two grouped query into one select将两个分组查询合并为一个选择
【发布时间】:2016-07-26 21:01:30
【问题描述】:

如何连接两个分组在下面的查询?

select [Fiscal Year],[Fiscal Quater],sum([colX])as X
from table1
group by [Fiscal Year],[Fiscal Quater];

select [Fiscal Year],[Fiscal Quater],sum([colY]) as Y
from table2
group by [Fiscal Year],[Fiscal Quater];

结果应该返回列: [财政年度],[财政季度], X, Y

【问题讨论】:

  • 如何连接?向我们展示单独结果的样本以及组合结果。
  • 刚刚更新的问题:FY、FQ、X、Y
  • This 可能会有所帮助,他们尝试了类似的方法。

标签: sql sql-server sql-server-2008 group-by


【解决方案1】:

UNION ALL 将两个表放在一个派生表中,在主级别执行GROUP BY

select [Fiscal Year], [Fiscal Quater], sum([colX])as X, sum([colY]) as Y
from
(
select [Fiscal Year], [Fiscal Quater], colX, NULL as colY from table1
UNION ALL
select [Fiscal Year], [Fiscal Quater], NULL as colX, colY from table2
)
group by [Fiscal Year],[Fiscal Quater]

或者,做双重GROUP BY

select [Fiscal Year], [Fiscal Quater], sum(X), sum(Y) 
from
(
    select [Fiscal Year], [Fiscal Quater], sum([colX]) as X, NULL as Y
    from table1
    group by [Fiscal Year],[Fiscal Quater];
    UNION ALL
    select [Fiscal Year], [Fiscal Quater], NULL as X, sum([colY]) as Y
    from table2
    group by [Fiscal Year],[Fiscal Quater]
)
group by [Fiscal Year],[Fiscal Quater]

也许优化不同?

【讨论】:

    【解决方案2】:

    你可能想要这样的东西:

    select coalesce(t1.[Fiscal Year], t2.[Fiscal Year]) as [Fiscal Year], 
           coalesce(t1.[Fiscal Quater], t2.[Fiscal Quater]) as [Fiscal Quater],
           coalesce(t1.X, 0) as X, 
           coalesce(t2.Y, 0) as Y
    from (
      select [Fiscal Year], [Fiscal Quater], sum([colX]) as X
      from table1
      group by [Fiscal Year], [Fiscal Quater]) as t1
    full join (
      select [Fiscal Year], [Fiscal Quater], sum([colY]) as Y
      from table2
      group by [Fiscal Year], [Fiscal Quater]
    ) as t2 on t1.[Fiscal Year] = t2.[Fiscal Year] and 
               t1.[Fiscal Quater] = t2.[Fiscal Quater]
    

    【讨论】:

    • 可以再增加一列,显示上一年的X值吗?
    • column Fiscal Year 是 Varchar 类型
    【解决方案3】:

    您可以使用以下 CTE:

    WITH T1 AS
    (
        SELECT [Fiscal year], [Fiscal  quater], Value = colX FROM   table1 
    ),
    T2 AS
    (
        SELECT [Fiscal year], [Fiscal quater], Value = colY FROM   table2
    )
    SELECT [T1.Fiscal Year],[T1.Fiscal Quater],
           X = SUM(T1.Value),
           Y = SUM(T2.Value)
    FROM T1 FULL OUTER JOIN T2
        ON T1.[Fiscal year]   = T2.[Fiscal year] 
       AND T1.[Fiscal quater] = T2.[Fiscal quater] 
    GROUP  BY [T1.Fiscal Year], T1.[Fiscal quater]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多