2014-07-01 48 views
2

我得到了三列二進制值。然後我得到一個基於這些值產生字符串的查詢。我使用case進行了這項工作。但它是相當巨大的(這是一個更大的查詢的一部分),我想知道也許有更好的方法來做到這一點?替換SQL查詢中的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服務器上工作。

回答

5

您可以改爲使用left()

select left('C', T.flag1)+ 
     left('G', T.flag2)+ 
     left('R', T.flag3) 
from TableA as T 
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 
0

也許你可以使用的功能和移動這個CASE語句此功能

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'做的代表「沒有標誌」更好。