select id,status
from request
上述查詢的status列返回一些整數值。我需要把條件返回一些字符串值而不是整數值。選擇查詢中的條件
例如:如果狀態1那麼它應該返回「新」或者如果狀態是2那麼它應該返回「已批准」。
select id,status
from request
上述查詢的status列返回一些整數值。我需要把條件返回一些字符串值而不是整數值。選擇查詢中的條件
例如:如果狀態1那麼它應該返回「新」或者如果狀態是2那麼它應該返回「已批准」。
我鄙視存儲在表中的神祕的整數值,而不知道它們的含義。
我的解決方案需要多一點工作,但從長遠來看,這是值得的。
開始通過創建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
列現在已經在數據庫中有詳細記錄和管理。
您可以使用CASE
爲
select id,
case status
when 1 then 'New'
when 2 then 'Approved'
end as statusText
from request
使用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
+1查找表建議... – 2012-08-06 14:24:45
select id, case when status = 1 then 'NEW' when status = 2 then 'Approved' else 'Undefined' end as status
from request
我不知道SQL Server的確切語法...
但在這裏,你可以使用MySQL的(變體應該爲你工作)的語法:
注意:這裏假設只有兩種選擇 - 如果有更多選項,請使用case關鍵字。
select id, if(status = 1, "New", "Approved) from request
這不適用於SQL Server 2008/2008 R2版本....沒有類似的結構可用。 SQL Server 2012現在有'IIF(...)'來做到這一點 – 2012-08-06 15:06:40
另一種需要考慮的方法是避免將標籤邏輯放在每個條件中,這就是創建一個可以加入以獲取字符串值的引用表,然後從請求表創建一個外鍵。這樣,如果您需要添加狀態或更改顯示標籤,則可以在一個位置執行此操作,而不必查找/更改每個查詢。 – 2012-08-06 14:24:16