基于共同值组合SQL中的行

时间:2018-01-10 21:30:06

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

我有一个状态列表,每个状态都附有计数。我想组合共享相似状态的行,以便每个状态只有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,这样如果其中一个表具有其他表没有的状态,则state列使用该值而不是NULL。

1 个答案:

答案 0 :(得分:1)

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

select s.firstname, s.lastname, q.id as not_taken_quiz_id, q.quiz_name as not_taken_quiz_name
from #student s
left join #quiz_details qd on s.id = qd.student_id
left join #quiz q on q.id <> qd.quiz_id