SQL CASE语句多个GUID =相同的值

时间:2011-06-28 16:02:35

标签: sql

我的案例陈述如下:

CASE id
  WHEN '9FDAC41CBF5ED6E3758' THEN 'Invalid' 
  WHEN '5EBF056B16E7593' THEN 'Invalid' 
  WHEN 'EEDC43399D10F44A19E293BB' THEN 'Invalid'
  WHEN '2322' THEN 'No'
  ELSE 'Yes'
END AS [Test]  

是否可以将3 when子句放在1 when子句中,因为它们基本上返回相同的值?

6 个答案:

答案 0 :(得分:5)

是。见下文。

CASE WHEN [SomeColumn] = '9FDAC41CBF5ED6E3758' 
    OR [SomeColumn] = '5EBF056B16E7593' 
    OR [SomeColumn] = 'EEDC43399D10F44A19E293BB'
THEN 'Invalid'
WHEN '2322' THEN 'No'
ELSE 'Yes'END AS [Test]  

您也可以使用IN

CASE WHEN [SomeColumn] IN('9FDAC41CBF5ED6E3758', '5EBF056B16E7593', 'EEDC43399D10F44A19E293BB')
THEN 'Invalid'
WHEN '2322' THEN 'No'
ELSE 'Yes'END AS [Test]  

答案 1 :(得分:4)

CASE 
    WHEN [SomeColumn] IN ('9FDAC41CBF5ED6E3758', '5EBF056B16E7593', 'EEDC43399D10F44A19E293BB') THEN 'Invalid'
    WHEN [SomeColumn] = '2322' THEN 'No'
    ELSE 'Yes'
END AS [Test]  

注意:我也包含了你的“不”条件......

答案 2 :(得分:3)

如果您要有一个很长的“无效”guid列表,那么您可以将它们存储在一个单独的表中(在我的示例中为INVALID_GUIDS)。如果您这样做,您的陈述将如下所示:

CASE 
    WHEN [SomeColumn] IN (SELECT GUID FROM INVALID_GUIDS) THEN 'Invalid'
    WHEN [SomeColumn] = '2322' THEN 'No'
    ELSE 'Yes'
END AS [Test]  

答案 3 :(得分:0)

CASE WHEN:
    WHEN id IN ('9FDAC41CBF5ED6E3758', '5EBF056B16E7593', 'EEDC43399D10F44A19E293BB') THEN 'Invalid' 
 ELSE 'Yes'
END AS [Test] 

答案 4 :(得分:0)

我建议而不是一个硬编码的GUID列表,而这些GUID应该放在某个表的某个表中,然后你可以使用如下的SQL语法:

SELECT MyTable.ColumnA ...
WHERE MyTable.GUID NOT IN
(SELECT InvalidGUID FROM InvalidGUIDs)

答案 5 :(得分:0)

如果您不喜欢case语句中的内联查询,则可以使用JosephStyons的一个替代方法。

SELECT
    CASE 
        WHEN ig.Guid IS NOT NULL THEN 'Invalid'
        WHEN [SomeColumn] = '2322' THEN 'No'
        ELSE 'Yes'
    END AS [Test]
FROM 
     YourTable yt
     LEFT JOIN INVALID_GUIDS ig
     ON yt.SomeColumn = ig.GUID