t-sql中的case语句

时间:2014-03-03 13:34:57

标签: sql case

我的表格类似于:

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语句,检查“产品”列中的列表是否包含“字母”列中的字母?

由于

3 个答案:

答案 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

Demo

这是我在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