问题: 数据库列具有三态(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
答案 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.