我的案例陈述如下:
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子句中,因为它们基本上返回相同的值?
答案 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