Aşağıdaki sorgu , her biri 0 veya 1 değerine SUM
sahip bir sütun deposu tablosu üzerinde pencereli gerçekleştirir 1500 total rows
ve INT
veri türünü taşar . Bu neden oluyor?
SELECT a, p, s, v, m, n,
SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END)
OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition
FROM (
SELECT a, p, s, v, m, n,
RANK() OVER (PARTITION BY v, s, a, p ORDER BY m) AS rank
FROM #t /* A columnstore table with 1,500 rows */
) x
WHERE x.rank = 1
--Msg 8115, Level 16, State 2, Line 1521
--Arithmetic overflow error converting expression to data type int.
Komut dosyasının tamamı
Tamamen içerilen bir çoğaltma komut dosyası için bu dosyaya bakın.
Sorgu planı
İşte açıklamalı bir tahmini sorgu planı ( Planı Yapıştır ile ilgili tam XML ).
Başarılı bir şekilde yürütülen benzer sorgular
Aşağıdaki değişikliklerden herhangi biri yapılırsa hata oluşmaz:
8649
Paralellik maliyet eşiğinden bağımsız olarak paralel bir plan tercih etmek için izleme işaretini kullanın9453
Toplu modunu devre dışı bırakmak için izleme işaretini kullanma- Kullanım
COUNT
yerine toplama işleviniSUM
fonksiyonu WHERE x.rank = 1
Yüklemi kaldır
Örneğin, bu sorgu başarıyla yürütülür:
SELECT a, p, s, v, m, n,
SUM(CASE WHEN n IS NULL THEN 0 ELSE 1 END)
OVER (PARTITION BY s, v, a ORDER BY p) AS lastNonNullPartition
FROM (
SELECT a, p, s, v, m, n,
RANK() OVER (PARTITION BY v, s, a, p ORDER BY m) AS rank
FROM #t /* A columnstore table with 1,500 rows */
) x
WHERE x.rank = 1
OPTION (QUERYTRACEON 9453/* Disable batch mode */)