SQL IN z CASE i podzapytaniem

Polecenie IN opisywałem tutaj, ale ostatnio "buszując" w Internecie natrafiłem na ciekawe pytanie dotyczące zapytania SQL i postanowiłem rozwinąć trochę poprzedni wpis o rozwiązanie z CASE i podzapytaniem.


    


Przykład zastosowania polecenia IN z CASE

SELECT
    *
FROM
    nazwa_tabeli
WHERE
    nazwa_pola IN (
            CASE
                WHEN warunek1 THEN wartość1
                WHEN warunek2 THEN wartość2
                ELSE warunek3 THEN wartość3
            END
        )

Widzimy tutaj że w zależności od wyniku polecenie CASE zostanie wybrana wartość która będzie argumentem dla polenia IN.


Przykład zastosowania polecenia IN z podzapytaniem

SELECT
    *
FROM
    nazwa_tabeli
WHERE
    nazwa_pola IN (
            SELECT TOP 1
                nazwa_pola
            FROM
                nazwa_tabeli
            WHERE
                warunek
        )

W tym przypadku zbiorem wartości dla IN jest wynik podzapytania.


Można by pójść o krok dalej i uzależnić wartości dla zbioru IN od zmiennej.


Przykład zastosowania polecenia IN z CASE i z deklaracją zmiennej.

DECLARE @zmienna varchar(5) = '100'

SELECT
    *
FROM
    nazwa_tabeli
WHERE
    nazwa_pola IN (
            CASE
                WHEN @zmienna < 100 THEN wartość1
                WHEN @zmienna = 100 THEN wartość2
                WHEN @zmienna > 100 THEN wartość3
            END
        )


Przykład zastosowania polecenia IN z podzapytaniem i z deklaracją zmiennej.

DECLARE @zmienna varchar(5) = '100'

SELECT
    *
FROM
    nazwa_tabeli
WHERE
    nazwa_pola IN (
            SELECT TOP 1
                nazwa_pola
            FROM
                nazwa_tabeli
            WHERE
                nazwa_pola <= @zmienna
        )