Переписать скрипт SQL без повторения тех же вложенных запросов - PullRequest
1 голос
/ 12 апреля 2020

У меня есть @ a , @ b , @ c и @ d объявленных переменных.

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

SELECT @a, @b, COUNT(DISTINCT id)
FROM Table t
WHERE @a IN
        (SELECT col FROM Table
        WHERE id = t.id)
AND @b IN
        (SELECT col FROM Table
        WHERE id = t.id)
AND @c NOT IN
        (SELECT col FROM Table
        WHERE id = t.id)
AND @d NOT IN
        (SELECT col FROM Table
        WHERE id = t.id)

1 Ответ

3 голосов
/ 12 апреля 2020

Вы можете использовать метод условного агрегирования

SELECT @a, @b,COUNT(id)
FROM   (SELECT id
        FROM   [Table]
        GROUP  BY id
        HAVING MAX(CASE WHEN col = @a THEN 1 ELSE 0 END) = 1 AND 
               MAX(CASE WHEN col = @b THEN 1 ELSE 0 END) = 1 AND
               MAX(CASE WHEN col = @c THEN 1 ELSE 0 END) = 0 AND
               MAX(CASE WHEN col = @d THEN 1 ELSE 0 END) = 0
                ) T 
...