Как сравнить строки в одной таблице со строкой по умолчанию каждого? - PullRequest
1 голос
/ 04 апреля 2020

У меня есть вопрос о выборе, есть группы, и каждая группа ГДЕ по "Data1", если не существует ГДЕ по "NULL или Пусто", в противном случае не отображается

Пример:

Table T1         Table when data='00001'    Table when data='00002'    Table when data=''
Col1 Col2        Col1 Col2                  Col1 Col2                  Col1 Col2
A    00001       A    00001                 A    NULL                  A    NULL
A    NULL        B    00001                 B    00002                 B    NULL
B    00002       C    00001                 D    NULL                  D    NULL
B    00001       D    NULL                  E    00002                 E    NULL
B    NULL        E    NULL
C    00001
D    NULL
E    00002
E    NULL

Мой Идея состоит в том, чтобы выбрать таблицу, где по данным и объединению с таблицей выбора, где Col2 = null и Col1 не в первом, выберите

WITH T1 AS
(
    SELECT * FROM Table WHERE Col2='00001'
)
SELECT * FROM T1
UNION
SELECT * FROM Table T2
WHERE T2.Col1 NOT IN (SELECT Col1 FROM T1) AND ISNULL(T2.Col2,'')=''

, но если у меня есть 30 тыс. Записей, это слишком медленно

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Вы можете использовать агрегацию:

select
    col1,
    max(col2) col2
from mytable
where col2 = '00001' or col2 is null
group by col1
1 голос
/ 04 апреля 2020

Использовать логические логики c и агрегировать:

SELECT col, MAX(col2) AS col2
FROM table t
WHERE (col = '00001' OR col IS NULL)
GROUP BY col;

Для нескольких фильтров:

WHERE (col IN ('00001', '00002', '') OR col IS NULL)
...