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

Ste*_*eav 2 sql sql-server select

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

客户端代码(不能再更改)只能理解“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
Run Code Online (Sandbox Code Playgroud)

Blo*_*ard 5

您可以使用如下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 ))
Run Code Online (Sandbox Code Playgroud)