2010-04-21 68 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。