首页 > 解决方案 > Sql查询以获取匹配和不匹配记录的计数

问题描述

请让我知道我们如何通过以下方案实现这一目标

我有一个有列的表

表 A

EmpId   Name  Contact
---------------------
100     AA    xxxxx
101     BB    yyyyy
102     rr    zzzzz
103     jj    1234
104     GG    6789

表 B

Id EmpId  Product
------------------
1  100     Sample1
2  100     Sample2
3  101     Sample1
4  103     Sample4

我需要从 TableA 中获取表 B 中存在的列数(不同)并且不存在于表 B 中与该EmpId列匹配

我尝试了以下方法

SELECT count(*) 
FROM Table A ta
WHERE ta.EmpId NOT IN (SELECT DISTINCT(tb.EmpId) 
                       FROM Table B tb) 

我只计算哪些行不存在。

如何编写单个查询来获取匹配和不匹配的所有行的计数?

期望的输出:

Matched NotMatched
------------------
3         2

标签: sql-serversql-server-2012

解决方案


将左连接与聚合一起使用:

SELECT
    COUNT(DISTINCT b.EmpId) AS Matched,
    COUNT(CASE WHEN b.EmpId IS NULL THEN 1 END) AS NotMatched
FROM TableA a
LEFT JOIN TableB b
    ON b.EmpId = a.EmpId;

推荐阅读