CHECKSUM_AGG私が予想していなかった 0 を返す条件がいくつかあるようです。議論されているものを見つけることができたのは 1 つだけです。つまり、重複した値が原因であるということです。DISTINCTこれはまたはで解決できますGROUP BY。
また、あまり意味のないシナリオをさらにいくつか見つけました。1 つは上司から提供されたもので、もう 1 つは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_AGG0 を返す原因を説明する答えが何であれ、これらの状況も説明できることを願っています。