0

我有一个专栏。我想将所有记录更新为1是否1存在于该列中。

当查询运行并且1列中没有它时,它会0按我的预期返回。如果一切正常,它会按我的预期1返回。1但是,如果列中有 a1和 a 0,则 distinct 返回 a01。我理解为什么,因为它们都是不同的值。

我希望能够只选择存在 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列中存在 a,我希望CASE查询的一部分返回1而不是两个不同的值。

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

TIA

4

1 回答 1

0

SELECT DISTINCT与其使用,不如使用SELECT MAX()。如果有任何1值,则结果为1,否则为0。IE

Calculated = (SELECT CAST(MAX(Calculated) AS BIT) 
              FROM Staging.UriData
              WHERE SerialNumber = s.Serialnumber AND Calculated IS NOT NULL)
于 2019-02-11T22:25:41.850 回答