Вот один простой способ сделать это - использовать cte с парой count...over
выражений.
Сначала создайте и заполните образец таблицы ( Пожалуйста, сохраните нас на этом шагев ваших будущих вопросах)
DECLARE @T AS TABLE
(
A char(1),
B char(1),
C char(1),
D char(1)
);
INSERT INTO @T (A, B, C, D) VALUES
('a', 'b', 'c', 'r'),
('g', 'b', 'c', 'r'),
('n', 'h', 'f', 'r'),
('k', 'u', 'e', 'z'),
('h', 'i', 'e', 'z');
Затем, cte:
WITH cte AS
(
SELECT A, B, C, D,
COUNT(*) OVER(PARTITION BY C, D) As CDCount,
COUNT(*) OVER(PARTITION BY D) As DCount
FROM @T
)
Запрос:
SELECT A, B, C, D
FROM cte
WHERE CDCount >= 2
AND DCount >= 3
ORDER BY A
Результаты:
A B C D
a b c r
g b c r