Запросить все строки на сервере, где 2 столбца совпадают не менее n раз, с несколькими условиями - PullRequest
0 голосов
/ 18 октября 2018

У меня есть таблица в SQL Operations Studio (SQL Server) со столбцами A, B, C, D. Я хочу запросить все строки со следующими условиями:

РЕДАКТИРОВАНИЕ С ОБРАЗЦОМ ДАННЫХ

   A    B    C    D
1  a    b    c    r
2  g    b    c    r
3  n    h    f    r
4  k    u    e    z
5  h    i    e    z
  1. Значения в столбце C & D совпадают не менее 2 раз
  2. Значение в столбце D должно появляться не менее 3 раз

Возврат:

   A    B    C    D
1  a    b    c    r
2  g    b    c    r
3  n    h    f    r

1 Ответ

0 голосов
/ 18 октября 2018

Вот один простой способ сделать это - использовать 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
...