CASE WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
Wiodący ', '
i końcowy ','
są dodawane, abyś mógł obsłużyć dopasowanie niezależnie od tego, gdzie się znajduje w ciągu (pierwszy wpis, ostatni wpis lub gdziekolwiek pomiędzy).
To powiedziawszy, dlaczego przechowujesz dane, które chcesz przeszukać, jako ciąg oddzielony przecinkami? Narusza to wszelkiego rodzaju formularze i najlepsze praktyki. Powinieneś rozważyć normalizację swojego schematu.
Ponadto:nie używaj 'single quotes'
jako ograniczniki identyfikatora; ta składnia jest przestarzała. Użyj [square brackets]
(preferowane) lub "double quotes"
Jeśli musisz. Zobacz „litery ciągów jako aliasy kolumn” tutaj:http ://msdn.microsoft.com/en-us/library/bb510662%28SQL.100%29.aspx
EDYTUJ Jeśli masz wiele wartości, możesz to zrobić (nie możesz skrócić tego z innymi CASE
wariantu składni lub za pomocą czegoś takiego jak IN()
):
CASE
WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
WHEN ', ' + dbo.Table.Column +',' LIKE '%, amlodipine,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
Jeśli masz więcej wartości, warto użyć funkcji podziału, np.
USE tempdb;
GO
CREATE FUNCTION dbo.SplitStrings(@List NVARCHAR(MAX))
RETURNS TABLE
AS
RETURN ( SELECT DISTINCT Item FROM
( SELECT Item = x.i.value('(./text())[1]', 'nvarchar(max)')
FROM ( SELECT [XML] = CONVERT(XML, '<i>'
+ REPLACE(@List,',', '</i><i>') + '</i>').query('.')
) AS a CROSS APPLY [XML].nodes('i') AS x(i) ) AS y
WHERE Item IS NOT NULL
);
GO
CREATE TABLE dbo.[Table](ID INT, [Column] VARCHAR(255));
GO
INSERT dbo.[Table] VALUES
(1,'lactulose, Lasix (furosemide), oxazepam, propranolol, rabeprazole, sertraline,'),
(2,'lactulite, Lasix (furosemide), lactulose, propranolol, rabeprazole, sertraline,'),
(3,'lactulite, Lasix (furosemide), oxazepam, propranolol, rabeprazole, sertraline,'),
(4,'lactulite, Lasix (furosemide), lactulose, amlodipine, rabeprazole, sertraline,');
SELECT t.ID
FROM dbo.[Table] AS t
INNER JOIN dbo.SplitStrings('lactulose,amlodipine') AS s
ON ', ' + t.[Column] + ',' LIKE '%, ' + s.Item + ',%'
GROUP BY t.ID;
GO
Wyniki:
ID
----
1
2
4