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_AGG
0 を返す原因を説明する答えが何であれ、これらの状況も説明できることを願っています。