修改SELECT-Statement(TSQL)的返回值[优化查询]

时间:2010-04-21 09:44:30

标签: sql sql-server select

问题: 数据库列具有三态(0,1,2)。 每个值都在服务器上使用。

客户端代码(不能再更改)只能理解'0,1'。 在客户视图中,'1'与'2'相同。所以我想更改数据库中的SQL查询以返回'1',如果特定值是> 0

我目前的解决方案是将2个选择(使用UNION SELECT)与不同的WHERE-Clauses相结合,并将“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

3 个答案:

答案 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 ))

答案 1 :(得分:2)

看起来你需要使用CASE。这是一个体面的教程 http://www.databasejournal.com/features/mssql/article.php/3288921/T-SQL-Programming-Part-5---Using-the-CASE-Function.htm

参见工作实例

答案 2 :(得分:0)

如果你只是CAST(CAST(val AS BIT) AS INT),你将获得0的整数0和其他所有的整数1.