2010-04-21 95 views
1

問題: 數據庫列表包含三態(0,1,2)。 每個值都在服務器端使用。修改SELECT語句(TSQL)的返回值[優化查詢]

客戶端代碼(不能改變)只能理解'0,1'。 在客戶端視圖中,'1'與'2'一致。所以我想要更改數據庫中的SQL查詢返回'1',如果具體值大於0.

我當前的解決方案是將2個選擇(使用UNION SELECT)與不同的WHERE子句結合起來並返回'1 '或'0'作爲靜態值。現在我正在尋找一種解決方案,只在一個SELECT語句中「翻譯」這個值。

這是我目前的解決方案:

SELECT 
dbo.Nachricht.NachrichtID, dbo.Nachricht.Bezeichnung, '1' AS BetrifftKontoeinrichtung, 
FROM   dbo.Nachricht INNER JOIN dbo.AdditionalData 
ON dbo.Nachricht.NachrichtID = dbo.AdditionalData.NachrichtID 

WHERE  (dbo.Nachricht.NachrichtID in (450,439)) 
AND dbo.AdditionalData.BetrifftKontoeinrichtung > 0 

UNION SELECT 
dbo.Nachricht.NachrichtID, dbo.Nachricht.Bezeichnung, '0' AS BetrifftKontoeinrichtung, 
FROM   dbo.Nachricht INNER JOIN dbo.AdditionalData 
ON dbo.Nachricht.NachrichtID = dbo.AdditionalData.NachrichtID 

WHERE  (dbo.Nachricht.NachrichtID in (450,439)) 
AND dbo.AdditionalData.BetrifftKontoeinrichtung = 0 

回答

4

您可以使用case聲明,就像這樣:

SELECT 
    dbo.Nachricht.NachrichtID, dbo.Nachricht.Bezeichnung, 
    CASE WHEN dbo.AdditionalData.BetrifftKontoeinrichtung = 0 
     THEN '0' ELSE '1' 
    END AS BetrifftKontoeinrichtung, 
FROM dbo.Nachricht 
INNER JOIN dbo.AdditionalData 
     ON dbo.Nachricht.NachrichtID = dbo.AdditionalData.NachrichtID  
WHERE (dbo.Nachricht.NachrichtID in (450,439)) 
+0

喜歡這個答案,謝謝! – 2012-09-14 14:03:07

0

如果你只是CAST(CAST(val AS BIT) AS INT)你會得到0和1的整數其他一切整數0。