CASE WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
', '
dan mengikuti ','
ditambahkan sehingga Anda dapat menangani kecocokan di mana pun ia berada dalam string (entri pertama, entri terakhir, atau di mana pun di antaranya).
Yang mengatakan, mengapa Anda menyimpan data yang ingin Anda cari sebagai string yang dipisahkan koma? Ini melanggar semua jenis formulir dan praktik terbaik. Anda harus mempertimbangkan untuk menormalkan skema Anda.
Selain itu:jangan gunakan 'single quotes'
sebagai pembatas pengenal; sintaks ini tidak digunakan lagi. Gunakan [square brackets]
(lebih disukai) atau "double quotes"
jika kamu harus. Lihat "literal string sebagai alias kolom" di sini:http ://msdn.microsoft.com/en-us/library/bb510662%28SQL.100%29.aspx
EDIT Jika Anda memiliki beberapa nilai, Anda dapat melakukan ini (Anda tidak dapat mempersingkatnya dengan CASE
lainnya varian sintaks atau dengan menggunakan sesuatu seperti IN()
):
CASE
WHEN ', ' + dbo.Table.Column +',' LIKE '%, lactulose,%'
WHEN ', ' + dbo.Table.Column +',' LIKE '%, amlodipine,%'
THEN 'BP Medication' ELSE '' END AS [BP Medication]
Jika Anda memiliki lebih banyak nilai, mungkin ada baiknya menggunakan fungsi split, mis.
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
Hasil:
ID
----
1
2
4