Sql — запрос для получения количества совпадающих и не совпадающих записей

#sql-server #sql-server-2012

Вопрос:

Пожалуйста, дайте мне знать, как мы можем достичь этого с помощью приведенного ниже сценария

У меня есть таблица со столбцами

Таблица А

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

Таблица В

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

Мне нужно получить количество столбцов из таблицы A, присутствующих в таблице 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
 

Ответ №1:

Используйте левое соединение с агрегацией:

 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;
 

Комментарии:

1. Я отредактировал вопрос с помощью еще одного сценария. Пожалуйста, дайте мне знать, как мы можем добиться подсчета сейчас, присоединившись к еще одной таблице

2. Я отклонил ваш вопрос. На этом этапе вам следует открыть новый вопрос.