我有一栏有点。如果该列中包含1
,我想将所有记录更新为1
。
当查询运行并且该列中没有1
时,它会按预期返回0
。如果全部为1
,则它只返回1
,正如我期望的那样。但是,如果该列中有1
和0
,则不重复项将返回0
和1
。我理解为什么,因为它们都是截然不同的价值。
我希望只能选择存在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
答案 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)