Похоже, что существует ряд условий, которые заставляют CHECKSUM_AGG
возвращать 0, которых я бы не ожидал. Мне удалось найти только один обсуждаемый вопрос, который приведет к его дублированию. Это можно решить с помощью DISTINCT
или GROUP BY
.
Я также нашел еще несколько сценариев, которые имеют меньше смысла для меня. Один из них был предоставлен моим начальником, и я нашел MSDN. Это я не знаю, как объяснить. Вот несколько SQL, которые демонстрируют сценарии:
SELECT
CHECKSUM_AGG(T.Number) AS ChecksumAgggregate
FROM
(
VALUES
(2)
, (3)
, (4)
, (5)
)AS T(Number)
DECLARE @t TABLE
(
Category VARCHAR(15),
Value VARCHAR(10)
)
INSERT @t
(
Category
, Value
)
VALUES
('OneCharacter','a')
,('OneCharacter','b')
,('OneCharacter','c')
,('OneCharacter','d')
,('TwoCharacters','aa')
,('TwoCharacters','bb')
,('TwoCharacters','cc')
,('TwoCharacters','dd')
,('ThreeCharacters','aaa')
,('ThreeCharacters','bbb')
,('ThreeCharacters','ccc')
,('ThreeCharacters','ddd')
,('SixCharacters','aaaaaa')
,('SixCharacters','bbbbbb')
,('SixCharacters','cccccc')
,('SixCharacters','dddddd')
,('AllValues','a')
,('AllValues','b')
,('AllValues','c')
,('AllValues','d')
,('AllValues','aa')
,('AllValues','bb')
,('AllValues','cc')
,('AllValues','dd')
,('AllValues','aaa')
,('AllValues','bbb')
,('AllValues','ccc')
,('AllValues','ddd')
,('AllValues','aaaaaa')
,('AllValues','bbbbbb')
,('AllValues','cccccc')
,('AllValues','dddddd')
select
Category, CHECKSUM_AGG(CHECKSUM(Value))
from @t
group by Category
select Category, Value, CHECKSUM(Value) ValueChecksum
from @t
В этих примерах из CHECKSUM_AGG
из этих запросов нет ничего, кроме 0. Последний запрос показывает, что ни один из значений CHECKSUM
, входящих в вызов CHECKSUM_AGG
, не дублируется.
Я надеюсь, что любой ответ описывает, какие причины CHECKSUM_AGG
для возврата 0 также объяснят эти ситуации.