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