Question

I have table similar to:

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')

Is it possible to write a CASE Statement which will check if the list in the 'Products' column contain a letter from 'Letter' column?

Thanks

Was it helpful?

Solution

Here is the query

Select *, Case When (charindex(Letter, Products, 0)>0) Then 'Yes' Else 'No' End AS [Y/N] from #test

OTHER TIPS

I think i managed to do the trick:

CASE WHEN Products LIKE '%'+Letter+'%' THEN 'TRUE' ELSE 'FALSE' END

You could use EXISTS with a split-function:

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

Here is the one i'm using on 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  
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top