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

修改SELECT语句(TSQL)的返回值[优化查询],sql,sql-server,select,Sql,Sql Server,Select,问题: 数据库具有三态(0,1,2)。 每个值都被服务器端使用 Clientcode(不能再更改)只能理解“0,1”。 在客户端视图中,“1”与“2”相同。因此,如果特定值大于0,我想将数据库中的SQL查询更改为返回“1” 我当前的解决方案是将2个SELECT(使用UNION SELECT)与不同的WHERE子句组合,并将“1”或“0”作为静态值返回。现在,我正在寻找一种解决方案,只在一条SELECT语句中“转换”值 这是我当前的解决方案: SELECT dbo.Nachricht.Nachr

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

Clientcode(不能再更改)只能理解“0,1”。 在客户端视图中,“1”与“2”相同。因此,如果特定值大于0,我想将数据库中的SQL查询更改为返回“1”

我当前的解决方案是将2个SELECT(使用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

您可以使用
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 ))

看起来您需要使用用例。这里有一个不错的教程

请参见工作示例

如果您只是
CAST(CAST(val AS BIT)AS INT)
您将得到0的整数0和其他所有值的整数1