选择两个不同的布尔值之一

时间:2019-02-11 22:09:31

标签: sql sql-update sql-server-2017-express

我有一栏有点。如果该列中包含1,我想将所有记录更新为1

当查询运行并且该列中没有1时,它会按预期返回0。如果全部为1,则它只返回1,正如我期望的那样。但是,如果该列中有10,则不重复项将返回01。我理解为什么,因为它们都是截然不同的价值。

我希望只能选择存在1的1。

UPDATE u    
SET ChannelType = (SELECT DISTINCT ChannelType FROM Staging.UriData WHERE SerialNumber = s.SerialNumber AND ChannelType IS NOT NULL),
Calculated = (SELECT DISTINCT CAST(CASE WHEN Calculated = 1
                                        THEN 1  
                                    ELSE 0
                                    END AS BIT  
                            )FROM Staging.UriData WHERE SerialNumber = s.Serialnumber AND Calculated IS NOT NULL)
FROM [Staging].[UriData] u
INNER JOIN #Serial15 s ON u.SerialNumber = s.SerialNumber
WHERE u.ChannelName IN (SELECT ChannelName FROM [Staging].[ActiveChannels])
AND u.SerialNumber = s.SerialNumber

预期结果是,如果该列中存在1,则我希望查询的CASE部分返回1而不是两个不同的值。

我无法在Fiddle中提供数据集,因为它是包含敏感信息的较大查询的一部分,因此请提前道歉。

TIA

1 个答案:

答案 0 :(得分:0)

使用SELECT DISTINCT而不是使用SELECT MAX()。如果有任何1值,则结果将为1,否则为0。即

Calculated = (SELECT CAST(MAX(Calculated) AS BIT) 
              FROM Staging.UriData
              WHERE SerialNumber = s.Serialnumber AND Calculated IS NOT NULL)