2014-02-07 91 views
0

我有以下SQL創建下表:添加新的列在exsiting表視圖

SELECT c.cOLUMN1 , c.cOLUMN2 , COALESCE (sc.cOLUMN3, 'XXX') AS cOLUMN3 
FROM tabel AS c 


COLUMN1 COLUMN2 COLUMN3 

    1  1  XXX  
    1  1  26785 
    1  1  23432 
    1  1  XXX 

我要添加兩個新列 - 如果在欄3的值等於太「XXX」,那麼 NEWCOLUMN_A應該是'0'並且NEWCOLUM_B應該是'1'。

否則,新的NEWCOLUMN_A應該是 '1',NEWCOLUM_B應該是 '1'。

如下圖所示:

COLUMN1 COLUMN2 COLUMN3 NEWCOLUMN_A NEWCOLUMN_B 
    1  1  XXX  0   1 
    1  1  26785  1   1   
    1  1  23432  1   1 
    1  1  XXX  0   1 
+0

訪問http://stackoverflow.com/questions/4069611/how-can-i-dynamically-create-columns-in-sql-select-statement –

回答

2
SELECT 
    c.cOLUMN1 , 
    c.cOLUMN2 , 
    COALESCE (c.cOLUMN3, 'XXX') AS cOLUMN3, 
    (CASE WHEN COALESCE(c.cOLUMN3, 'XXX') = 'XXX' THEN 0 ELSE 1 END) AS NEWCOLUMN_A, 
    1 AS NEWCOLUMN_B 
FROM tabel AS c 

或者,由於將列3衍生...

SELECT 
    c.cOLUMN1 , 
    c.cOLUMN2 , 
    COALESCE (c.cOLUMN3, 'XXX') AS cOLUMN3, 
    (CASE WHEN c.cOLUMN3 IS NULL THEN 0 ELSE 1 END) AS NEWCOLUMN_A, 
    1 AS NEWCOLUMN_B 
FROM tabel AS c 
0

首先添加列表中:

ALTER TABLE tabel 
    ADD NEWCOLUMN_A BIT NULL; 
ALTER TABLE tabel 
    ADD NEWCOLUMN_B BIT NULL; 

然後UPDATE該表格:

UPDATE tabel 
SET NEWCOLUMN_A = CASE WHEN COLUMN3 = 'XXX' THEN 0 ELSE 1 END, 
    NEWCOLUMN_B = 1 
0

我認爲這是你想要完成的。

Declare @string As nvarchar(50) 
Set @string = 'xxx' 
Select CASE WHEN @string = 'xxx' Then 0 Else 1 End as NEWCOLUM_A, 1 as NEWCOLUM_B 
set @string = 'yyy' 
Select CASE WHEN @string = 'xxx' Then 0 Else 1 End as NEWCOLUM_A, 1 as NEWCOLUM_B 
0
SELECT c.cOLUMN1 
    , c.cOLUMN2 
    , COALESCE(c.cOLUMN3, 'XXX') AS cOLUMN3 
    , CASE WHEN c.cOLUMN3 IS NULL THEN 1 ELSE 0 END AS NEWCOLUMN_A 
    , 1 AS NEWCOLUM_B 
FROM tabel AS c