在SQL查询中替换CASE

时间:2014-07-01 11:09:33

标签: sql sql-server case

我有三列二进制值。然后我得到一个查询,根据这些值创建一个字符串。我使用case完成了这项工作。但它非常庞大(它是一个更大的查询的一部分),我想知道可能有更好的方法吗?

SELECT (CASE
    WHEN TableA.flag1 = 1 AND TableA.flag2 = 1 AND TableA.flag3 = 1 THEN 'CGR'
    WHEN TableA.flag1 = 1 AND TableA.flag2 = 1 THEN 'CG'
    WHEN TableA.flag1 = 1 AND TableA.flag3 = 1 THEN 'CR'
    WHEN TableA.flag2 = 1 AND TableA.flag3 = 1 THEN 'GR'
    WHEN TableA.flag1 = 1 THEN 'C'
    WHEN TableA.flag2 = 1 THEN 'G'
    WHEN TableA.flag3 = 1 THEN 'R'
    ELSE 'nothing'
END)
FROM TableA

我正在使用MSSQL 2000服务器。

4 个答案:

答案 0 :(得分:5)

我不知道这是否“更好”,但它更简洁:

SELECT ((CASE WHEN TableA.flag1 = 1 THEN 'C' ELSE '' END) +
        (CASE WHEN TableA.flag2 = 1 THEN 'G' ELSE '' END) +
        (CASE WHEN TableA.flag3 = 1 THEN 'R' ELSE '' END)
       )
FROM TableA;

好的,这不完全相同,因为你得到''而不是'nothing'。但我认为空字符串比'nothing'更好地表示“无标志”。

答案 1 :(得分:5)

您可以改为使用left()

select left('C', T.flag1)+
       left('G', T.flag2)+
       left('R', T.flag3)
from TableA as T

答案 2 :(得分:1)

试试这个:

SELECT
CASE WHEN flag1 = 1 THEN 'C' ELSE '' END +
CASE WHEN flag2 = 1 THEN 'G' ELSE '' END +
CASE WHEN flag3 = 1 THEN 'R' ELSE '' END
FROM TABLEA

答案 3 :(得分:0)

也许您可以使用函数并将此CASE语句移动到此函数