這是以下幾行sql代碼:
SELECT cd.continent, cd.location, cd.date, cd.population, cv.new_vaccinations,
SUM(CONVERT(int, cv.new_vaccinations)) OVER (Partition by cd.location
Order by cd.location, cd.date)
FROM [Project Covid Analysis]..covid_death$ as cd
JOIN [Project Covid Analysis]..Covid_Vaccine$ as cv
ON cd.date=cv.date
AND cd.location=cv.location
WHERE cd.continent IS NOT NULL
ORDER BY 2,3
執行這些行后,我收到一條錯誤訊息“RANGE 視窗框架的 ORDER BY 串列的總大小為 1020 位元組。支持的最大大小為 900 位元組。” 我認為語法已經正確。請,如果有人知道如何克服這個。謝謝。
uj5u.com熱心網友回復:
很可能RANGE UNBOUNDED PRECEDING無論如何您都不想要視窗框架,但不幸的是,這是默認設定。
而是使用 ROWS UNBOUNDED PRECEDING
SUM(CONVERT(int, cv.new_vaccinations)) OVER (Partition by cd.location
Order by cd.location, cd.date ROWS UNBOUNDED PRECEDING)
雖然如前所述,如果您按值進行磁區,則也沒有點排序。
uj5u.com熱心網友回復:
錯誤訊息不言自明:子句中的order by列不能over總大小超過 900 位元組。
這是一個復制錯誤訊息的示例:
drop table if exists [dbo].[Example1];
create table [dbo].[Example1] (
[Location] varchar(1017),
[Date] date
);
select
[Location],
[Date],
sum(1) over (partition by [Location] order by [Location], [Date]) as [Sum]
from [dbo].[Example1];
-- Msg 8729 Level 16 State 1 Line 6
-- ORDER BY list of RANGE window frame has total size of 1020 bytes. Largest size supported is 900 bytes.
減少 Location 列的大小,使總大小小于或等于 900 位元組,例如:
drop table if exists [dbo].[Example2];
create table [dbo].[Example2] (
[Location] varchar(897),
[Date] date
);
select
[Location],
[Date],
sum(1) over (partition by [Location] order by [Location], [Date]) as [Sum]
from [dbo].[Example2];
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/372107.html
標籤:sql sql-server
上一篇:將列locality_name更新為市場名稱,但我有相同的locality_id
下一篇:SQL生成日期之間的每日記錄
