我的表格类似于:
Create Table #test (Letter varchar(5), Products varchar(30))
Insert into #test (Letter, Products)
Values ('A','B,C,D,E,F'),('B','B,C,D,E,F'),('G','B,C,D,E,F'),('Z','B,C,D,E,F'),('E','B,C,D,E,F')
是否可以编写CASE语句,检查“产品”列中的列表是否包含“字母”列中的字母?
由于
答案 0 :(得分:1)
这是查询
Select *, Case When (charindex(Letter, Products, 0)>0) Then 'Yes' Else 'No' End AS [Y/N] from #test
答案 1 :(得分:0)
我想我成功了:
CASE WHEN Products LIKE '%'+Letter+'%' THEN 'TRUE' ELSE 'FALSE' END
答案 2 :(得分:0)
您可以将EXISTS
与分裂功能结合使用:
SELECT Letter, Products,
ContainsLetter = CASE WHEN EXISTS
(
SELECT 1 FROM dbo.Split(t1.Products, ',')s
WHERE s.Item = Letter
)
THEN 'Yes' ELSE 'No' END
FROM #test t1
这是我在SQL-Server 2005上使用的那个:
CREATE FUNCTION [dbo].[Split]
(
@ItemList NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @ItemTable TABLE (Item VARCHAR(250))
AS
BEGIN
DECLARE @tempItemList NVARCHAR(MAX)
SET @tempItemList = @ItemList
DECLARE @i INT
DECLARE @Item NVARCHAR(4000)
SET @i = CHARINDEX(@delimiter, @tempItemList)
WHILE (LEN(@tempItemList) > 0)
BEGIN
IF @i = 0
SET @Item = @tempItemList
ELSE
SET @Item = LEFT(@tempItemList, @i - 1)
INSERT INTO @ItemTable(Item) VALUES(@Item)
IF @i = 0
SET @tempItemList = ''
ELSE
SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
SET @i = CHARINDEX(@delimiter, @tempItemList)
END
RETURN
END