Select 两个不同的布尔值之一
Select one of two distinct boolean values
我有一个专栏,有点。如果该列中存在 1
,我想将所有记录更新为 1
。
当查询运行并且列中没有 1
时,它 returns 0
如我所料。如果全部是 1
,那么 return 就是我所期望的 1
。但是,如果列中有 1
和 0
,则不同的 return 为 0
和 1
。我明白为什么,因为它们都是不同的值。
我只想 select 出现 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
部分为 return 1
而不是两者不同的值。
我无法在 Fiddle 中提供数据集,因为它是包含敏感信息的较大查询的一部分,因此提前致歉。
TIA
不要使用 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)
我有一个专栏,有点。如果该列中存在 1
,我想将所有记录更新为 1
。
当查询运行并且列中没有 1
时,它 returns 0
如我所料。如果全部是 1
,那么 return 就是我所期望的 1
。但是,如果列中有 1
和 0
,则不同的 return 为 0
和 1
。我明白为什么,因为它们都是不同的值。
我只想 select 出现 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
部分为 return 1
而不是两者不同的值。
我无法在 Fiddle 中提供数据集,因为它是包含敏感信息的较大查询的一部分,因此提前致歉。
TIA
不要使用 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)