Использование GROUP BY
и HAVING
должно быть рабочим решением, но ваш вопрос, вероятно, имеет два возможных ответа:
- случай, когда
"Activity Status" = 12
и все другие (все остальные) "Activity Status" = 11
- случай, когда
"Activity Status" = 12
и все другие (всего четыре возможных) "Activity Status" = 11
Введите:
CREATE TABLE #Data
(
ID int,
Activity varchar(10),
Activity_type int,
Activity_status int
)
INSERT INTO #Data
(ID, Activity, Activity_type, Activity_status)
VALUES
(10, 'call1', 10893, 11),
(10, 'call2', 10894, 11),
(10, 'email1', 10895, 11),
(10, 'email2', 10896, 11),
(10, 'text1', 10897, 12),
(11, 'call1', 10893, 11),
(11, 'call2', 10894, 11),
(11, 'email1', 10895, 11),
(11, 'email2', 10896, 12),
(11, 'text1', 10897, 12)
T-SQL (для всех остальных):
SELECT ID
FROM #Data
GROUP BY ID
HAVING
SUM(CASE WHEN Activity = 'text1' AND Activity_status = 12 THEN 1 END) = 1 AND
SUM(1) - SUM(CASE WHEN Activity <> 'text1' AND Activity_status = 11 THEN 1 END) = 1
T-SQL (для всех возможных четырех):
SELECT ID
FROM #Data
GROUP BY ID
HAVING
SUM(CASE WHEN Activity = 'text1' AND Activity_status = 12 THEN 1 END) = 1 AND
SUM(CASE WHEN Activity IN ('call1', 'call2', 'email1', 'email2') AND Activity_status = 11 THEN 1 END) = 4
Выход:
---
ID
---
10