Выберите одно из двух различных логических значений - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть немного столбец.Я хочу обновить все записи до 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

1 Ответ

0 голосов
/ 12 февраля 2019

Вместо использования 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)
...