sql-server - 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
解决方案
将左连接与聚合一起使用:
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;
推荐阅读
- azure - 如何将 movesense 连接到 Azure iothub?
- python - 在python中解析json字符串列表
- angular - RXJS - 处理 Instagram API 上的 404 错误
- java - Android Kotlin / JAVA - 自 1970 年以来以秒为单位获取当前世界时间 / UTC
- twitter-bootstrap - 具有淡入淡出效果的 Bootstrap 4 弹出框?
- windows - IDE 崩溃后读取控制台应用程序的标准输出
- asp.net-core - 在 AspNetCore IApplicationBuilder.Map 中使用令牌/约束
- arrays - How to fix "dont get a clear Array after a Programm Call"
- android - Android 的 Unity 构建因 Gradle 错误而失败
- google-calendar-api - 通过 PHP 中的 API 将事件添加到 Google 日历