【问题标题】:Combining Rows in SQL Based on Common Values基于公共值组合 SQL 中的行
【发布时间】:2018-01-10 21:30:06
【问题描述】:

我有一个州列表,每个州都有一个计数。我想合并共享相似状态的行,这样每个状态只有 1 行,并且计数是数字或 null。

查询

select COALESCE(t1.State, t2.State, t3.State) AS 'State', t1.DMECount, t2.TransCount, t3.ProCount 
from #TestTable t1
FULL OUTER JOIN #TestTable2 t2 ON t1.State = t2.State
FULL OUTER JOIN #TestTable3 t3 ON t2.State = t3.State
ORDER BY 'State'

当前结果

State|DMECount|TransCount|ProCount
MA   |19      |NULL      |NULL
MA   |NULL    |NULL      |1
MD   |NULL    |NULL      |1
MD   |8       |NULL      |NULL
MI   |1450    |1         |259
MN   |21      |NULL      |NULL
MN   |NULL    |NULL      |2

期望的结果

State|DMECount|TransCount|ProCount
MA   |19      |NULL      |1
MD   |8       |NULL      |1
MI   |1450    |1         |259
MN   |21      |NULL      |2

从我看过的其他解决方案来看,似乎按状态分组并取其他人的 MAX 可能会满足我的需要,但我不能按使用 COALESCE 的字段进行分组。使用 COALESCE 的方式是,如果其中一个表具有其他表没有的状态,则状态列使用该值而不是 NULL。

【问题讨论】:

  • GROUP BY 当前查询结果。
  • 您能否提供#TestTable1#TestTable2#TestTable3 的定义?如果您可以提供示例数据,在填充这些表后我们可以获得与查询相同的结果,那将非常有帮助。

标签: sql sql-server join full-outer-join


【解决方案1】:

您只需在 GROUP BY 子句中包含 COALSCE 语句:

select COALESCE(t1.State, t2.State, t3.State) AS 'State', max(t1.DMECount), max(t2.TransCount), Max(t3.ProCount)
from #TestTable t1
FULL OUTER JOIN #TestTable2 t2 ON t1.State = t2.State
FULL OUTER JOIN #TestTable3 t3 ON t2.State = t3.State
GROUP BY COALESCE(t1.State, t2.State, t3.State)
ORDER BY COALESCE(t1.State, t2.State, t3.State)

【讨论】:

  • 不知道你可以按这样的功能分组,它解决了我的问题,谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-06-11
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多