我有一个包含COUNT()函数的表,该函数返回所有字段并计算出来。现在,我需要连接另一个表并返回匹配的行数和不匹配的行。我不确定如何使用GROUP BY和COUNT()函数并获得我需要的结果。
SELECT tb1.type, count(tb1.type) as total
FROM table1 tb1
GROUP BY tb1.type
这将为我返回总数:
TABLE1的结果:
Type total
Egg 200
Cream 133
Milk 12
太棒了。但是,现在我有另一个表...表2有一些匹配的记录,因此在该表上执行相同的查询将显示如下内容:
TABLE2的结果:
Type total
Egg 187
Cream 103
Milk 6
所以,我的结果需要看起来像这样:
TABLE1的结果:
Type total totalINTABLE2 totalNOTINTABLE2
Egg 200 187 13
Cream 133 103 30
Milk 12 6 6
不确定此处加入是最佳,还是UNION或EXISTS。令我困惑的是小组。
答案 0 :(得分:0)
嗯,你可以简单地init
结果集,如
JOIN
答案 1 :(得分:0)
使用CTE计算每个表中的总数,然后将它们连接在一起:
;WITH
cte1 as (
SELECT tb1.type, count(tb1.type) as total
FROM table1 tb1
GROUP BY tb1.type
),
cte2 as (
SELECT tb2.type, count(tb2.type) as total
FROM table2 tb2
GROUP BY tb2.type
)
SELECT ISNULL(cte1.type, cte2.type) as type,
cte1.total as TotalInTable1,
cte2.total as TotalInTable2,
ISNULL(cte1.total, 0) - ISNULL(cte2.total, 0) as TotalNotInTable2
FROM cte1
FULL JOIN cte2 ON cte1.type = cte2.type