2016-08-19 51 views
0

我已經從兩個布爾列下面的示例中的數據:組合來自兩個柱的布爾結果SQL

ID  Male  Female 
1  1   0 
2  0   1 
3  0   1 
4  1   0 
5  0   1 

我想的兩列組合成只包含「M」和「F」的單個列。另外,我希望在定義列時寫入的SELECT語句中執行此操作。

那麼結果應該是這樣的:

ID  Gender 
1  M 
2  F 
3  F 
4  M 
5  F 

我知道我可以像單獨的更新語句實現這一目標:

UPDATE table_1 
SET Gender='M' 
FROM table_2 t2 
WHERE t2.Male=1 

UPDATE table_1 
SET Gender='F' 
FROM table_2 t2 
WHERE t2.Female=1 

但我是真的希望在聲明性別列時達到相同的結果?

有誰知道這是否可能?

在此先感謝!

+0

嘗試'SELECT ID,CASE WHEN男= 1,則 'M' ELSE 'F' END AS Gender' – techspider

+1

,如果他們都爲0 ?或1? – Hogan

+0

FWIW,sql server沒有真正的布爾類型。我們有位數據類型,它經常像布爾值一樣使用,但它可以有3個值。 NULL,0,1 –

回答

1
UPDATE table_1 
SET Gender= CASE WHEN Male = 1 THEN 'M' 
       WHEN Female = 1 THEN 'F' 
       ELSE 'Other' // optional 
      END; 

當然我嘗試以開放的心態和猜你讓Male = 0 and Female = 0 否則可以簡單地用IIF

UPDATE table_1 
SET Gender = IIF (Male = 1, 'M', 'F'); 
+0

我認爲我們需要「ELSE」太:)世界已經改變 – techspider

+0

@techspider是的,我知道這就是爲什麼我使用'CASE',但等等這種情況下是OP didnt定義任何值'NULL',但我會將其作爲可選項包含在內。 –

2

可以使用CASE表達。

查詢

UPDATE t1 
SET t1.Gender = (
    CASE WHEN t2.Male = 1 AND t2.Female = 0 THEN 'M' 
    WHEN t2.Male = 0 AND t2.Female = 1 THEN 'F' 
    ELSE NULL END 
) 
FROM Table_1 t1 
JOIN Table_2 t2 
ON t1.ID = t2.ID; 
+0

爲什麼需要'JOIN'? –

+0

男性和女性列在Table_2中,需要更新Table_1。 – Wanderer

0

如何select if(Male = 1, 'M', 'F') as gender

1

下面是如何使用SELECT語句做到這一點:

SELECT ID, 
CASE WHEN Male = 1 THEN 'M' 
ELSE 'F' END AS gender 
FROM My_Table