2012-08-06 105 views
0
select id,status 
from request 

上述查詢的status列返回一些整數值。我需要把條件返回一些字符串值而不是整數值。選擇查詢中的條件

例如:如果狀態1那麼它應該返回「新」或者如果狀態是2那麼它應該返回「已批准」。

+0

另一種需要考慮的方法是避免將標籤邏輯放在每個條件中,這就是創建一個可以加入以獲取字符串值的引用表,然後從請求表創建一個外鍵。這樣,如果您需要添加狀態或更改顯示標籤,則可以在一個位置執行此操作,而不必查找/更改每個查詢。 – 2012-08-06 14:24:16

回答

1

我鄙視存儲在表中的神祕的整數值,而不知道它們的含義。

我的解決方案需要多一點工作,但從長遠來看,這是值得的。

開始通過創建StatusValues的新表:

StatusValues 
------------ 
Status INT PRIMARY KEY 
StatusValue VARCHAR(20) 

填充該表:

Status StatusValue 
------ ----------- 
1   New 
2   Approved 

創建一個從申請表的外鍵關係到這一個:

ALTER TABLE request 
    ADD CONSTRAINT FK_Request_StatusValues FOREIGN KEY (status) 
    REFERENCES StatusValues (status); 

最後,寫下查詢:

SELECT r.id, sv.StatusValue 
    FROM request r 
     INNER JOIN StatusValues sv 
      ON r.status = sv.status; 

以前神祕的request.status列現在已經在數據庫中有詳細記錄和管理。

3

您可以使用CASE

select id, 
     case status 
      when 1 then 'New' 
      when 2 then 'Approved' 
     end as statusText 
from request 
4

使用case語句:

select 
    id, 
    case status 
     when 1 then 'New' 
     when 2 then 'Approved' 
    end as status 
from 
    request 

雖然我會建議你有一個包含數字和狀態值對應的文本字符串查找表。

select 
    req.id, 
    stat.value as status 
from 
    request as req inner join status as stat 
     on req.status = stat.id 
+0

+1查找表建議... – 2012-08-06 14:24:45

1
select id, case when status = 1 then 'NEW' when status = 2 then 'Approved' else 'Undefined' end as status 
from request 
0

我不知道SQL Server的確切語法...

但在這裏,你可以使用MySQL的(變體應該爲你工作)的語法:

注意:這裏假設只有兩種選擇 - 如果有更多選項,請使用case關鍵字。

select id, if(status = 1, "New", "Approved) from request 
+0

這不適用於SQL Server 2008/2008 R2版本....沒有類似的結構可用。 SQL Server 2012現在有'IIF(...)'來做到這一點 – 2012-08-06 15:06:40