2016-10-20 111 views
0

我有這個表:如何構建基於其他列的新列在SELECT

Assets 
-------------------------------- 
Description VARCHAR(50) NOT NULL 
Suffix1 VARCHAR(50) NOT NULL 
UseSuffix1 BIT NOT NULL 
Suffix2 VARCHAR(50) NULL 
UseSuffix2 BIT NOT NULL 
Suffix3 VARCHAR(50) NULL 
UseSuffix3 BIT NOT NULL 

我試圖做一個SELECT聲明構造如下:a VARCHAR(MAX)列是由的Description字段,加在需要時附加的(經由UseSuffixX標誌)其他後綴的輸入和輸出的

例子:

'MyDesc' 
'Suffix1' 
0 
NULL     ->  'MyDesc' 
0 
NULL 
0 
----------------------- 
'MyDesc' 
'Suffix1' 
1 
NULL     ->  'MyDesc - Suffix1' 
0 
NULL 
0 
----------------------- 
'MyDesc' 
'Suffix1' 
0 
'Suffix2'   ->  'MyDesc - Suffix2 - Suffix 3' 
1 
'Suffix3' 
1 
----------------------- 
'MyDesc' 
'Suffix1' 
1 
'Suffix2'   ->  'MyDesc - Suffix1 - Suffix 3' 
0 
'Suffix3' 
1 

我starte通過使用CASE指令在我SELECTð像這樣:

SELECT 
    [Description] + 
    CASE 
     WHEN UseSuffix1 = 1 THEN ' - ' + Suffix1 
     WHEN UseSuffix2 = 1 THEN ' - ' + Suffix2 
     WHEN UseSuffix3 = 1 THEN ' - ' + Suffix3 
     ELSE '' 
    END 
FROM Assets 

,但很快就意識到,我需要擴展的所有可能性的樹中的每個分支WHEN ...不知道如果我表達我自己在這裏正確。

什麼是更實際的方法來做到這一點?

回答

2

你並不需要所有的可能性,只是每一個後綴case

SELECT ([Description] + 
     (CASE WHEN UseSuffix1 = 1 THEN ' - ' + Suffix1 ELSE '' END) + 
     (CASE WHEN UseSuffix2 = 1 THEN ' - ' + Suffix2 ELSE '' END) + 
     (CASE WHEN UseSuffix3 = 1 THEN ' - ' + Suffix3 ELSE '' END) 
     ) 
FROM Assets