【问题标题】:Select one of two distinct boolean values选择两个不同的布尔值之一
【发布时间】:2019-02-11 22:09:31
【问题描述】:

我有一个专栏。如果该列中存在1,我想将所有记录更新为1

当查询运行并且列中没有1 时,它会按我的预期返回0。如果全部是1,它只返回1,正如我所料。但是,如果列中有 10,则 distinct 返回 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

【问题讨论】:

  • 您使用的是哪个数据库?请为您的问题添加适当的标签。

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


【解决方案1】:

不要使用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)

【讨论】:

    猜你喜欢
    • 2021-07-13
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2023-03-11
    • 2017-08-20
    • 2020-12-29
    相关资源
    最近更新 更多