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