2013-02-05 31 views
0

我有一個表:如何反轉查詢中的通過/失敗狀態列?

sid sname status 
101 abc pass 
102 cda fail 
103 fgh pass 
104 hij pass 
105 jqk fail 
106 lfj fail 

,我想一個輸出:

sid sname status 
101 abc fail 
102 cda pass 
103 fgh fail 
104 hij fail 
105 jqk pass 
106 lfj pass 
+3

是不是作弊? – MacGyver

+2

只是使用case語句否定狀態 –

回答

2
select 
    sid, 
    sname, 
    case 
     when status = 'pass' then 'fail' 
     when status = 'fail' then 'pass' 
     else null 
    end as 'status' 
from tableX 
+0

'when status ='fail'then'pass' else null' redundant。 –

+0

我想他想要更新 – brykneval

+1

@HamletHakobyan:'else null'是多餘的,但沒有傷害,並且是明確的,並且明確是好的。 –

0
UPDATE Table 
SET Status = CASE Status WHEN 'pass' THEN 'fail' ELSE 'pass' END 
GO 
SELECT * 
FROM Table 
GO 

或者:

UPDATE Table 
SET Gender = IIF(Gender = 'pass', 'fail', 'pass') 
GO 
SELECT * 
FROM Table 
GO 
+0

歡迎來到Stack Overflow。太久之前請閱讀[常見問題]。僅供參考:要將代碼輸入爲代碼,請將其輸入到編輯框中,然後選中它,然後按下框上方的**按鈕將其全部縮進4個空格。避免製表符;他們使事情複雜化。 –

+1

你的第一個'CASE'語句的問題是,如果有任何具有NULL狀態的行,它們將變成'pass'行。這可能是我們所期望的(如果確實需要UPDATE,我將它解釋爲像MacGyver那樣作爲查詢,而不是UPDATE),但它可能不是。同樣,我想知道'IIF'版本對包含NULL狀態的行做了什麼?請注意,'... SET status = CASE狀態WHEN'失敗'THEN'傳遞'ELSE'失敗'END'時,如果有任何狀態爲空的行,則會產生不同的結果。 –