次のテーブル構造とデータがあるとします。
DECLARE @DataSource TABLE
(
[AccountID] TINYINT
,[KeyWord] NVARCHAR(24)
)
INSERT INTO @DataSource ([AccountID], [KeyWord])
VALUES (1,'Yellow')
,(1,'Red')
,(1,'Male')
,(2,'Old')
,(3,'Yellow')
,(3,'Old')
,(4,'New')
,(4,'Famale')
上記の変数を使用してレコードをフィルタリングしています。
DECLARE @SearchKeyWords NVARCHAR(MAX) = 'Yellow,Male,Red'
必要なのは、CSV リストをテーブルに変換することだけです。
DECLARE @XML XML = N'<r><![CDATA[' + REPLACE(@SearchKeyWords, ',', ']]></r><r><![CDATA[') + ']]></r>'
SELECT DISTINCT RTRIM(LTRIM(Tbl.Col.value('.', 'nvarchar(250)')))
FROM @xml.nodes('//r') Tbl(Col)
したがって、これは完全に機能する例です。
DECLARE @DataSource TABLE
(
[AccountID] TINYINT
,[KeyWord] NVARCHAR(24)
)
INSERT INTO @DataSource ([AccountID], [KeyWord])
VALUES (1,'Yellow')
,(1,'Red')
,(1,'Male')
,(2,'Old')
,(3,'Yellow')
,(3,'Old')
,(4,'New')
,(4,'Famale')
DECLARE @SearchKeyWords NVARCHAR(MAX) = 'Yellow,Male,Red'
DECLARE @XML XML = N'<r><![CDATA[' + REPLACE(@SearchKeyWords, ',', ']]></r><r><![CDATA[') + ']]></r>'
;WITH KeyWords([KeyWord]) AS
(
SELECT DISTINCT RTRIM(LTRIM(Tbl.Col.value('.', 'nvarchar(250)')))
FROM @xml.nodes('//r') Tbl(Col)
)
SELECT DISTINCT [AccountID]
FROM @DataSource DS
INNER JOIN KeyWords KS
ON DS.[KeyWord] = KS.[KeyWord]