Search code examples
sql-serverselectdynamicdeclare

How can I use a string list from a select statement in a NOT IN clause


I want to build a list of Lastnames to filter out from the results of the second select statement something like this (which doesn't do it)

DECLARE @ExcludedList VARCHAR(MAX)
SET @ExcludedList = (SELECT  TOP 20 Lastname
FROM dbo.Subscribers
where [Firstname] = 'Dave')

SELECT [Firstname], Count([Firstname]) as [Count] from Subscribers
WHERE [Lastname] not in (@ExcludedList) 

Solution

  • If you need to use a variable, then it has to be a table variable:

    DECLARE @ExcludedList TABLE (Lastname VARCHAR(MAX))
    
    INSERT INTO @ExcludedList
    SELECT  TOP 20 Lastname
    FROM dbo.Subscribers
    WHERE [Firstname] = 'Dave'
    
    SELECT [Firstname], Count([Firstname]) AS [Count] 
    FROM Subscribers
    WHERE [Lastname] NOT IN (SELECT Lastname FROM @ExcludedList)