Выберите одно из двух различных логических значений

У меня есть столбец, который немного. Я хочу обновить все записи в 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, поскольку он является частью более крупного запроса, который содержит конфиденциальную информацию, поэтому заранее приносим свои извинения.

ТИА

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)
Другие вопросы по тегам