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