在SQL输出中获得正确的行号有一些问题。我正在使用ROW_NUMBER函数,然后通过ID和date进行分区,但是似乎没有什么能给出预期的结果。
SELECT
BCG.BudgetId
,CAST(BCG.StartOfPeriod AS DATE) AS StartOfPeriod
,ROUND(SUM(BCG.Charge),2) AS ExpenditureBudget
,ROUND(SUM(BCG.Consumption),2) AS ConsumptionBudget
,ROW_NUMBER() OVER (PARTITION BY BCG.BudgetId,BCG.StartOfPeriod ORDER BY BCG.StartOfPeriod ASC) AS rowNum
FROM B_BudgetCalGroup BCG
WHERE BCG.BudgetId = 4940
GROUP BY BCG.BudgetId,StartOfPeriod当前产出:
4940 2021-08-01 281495.36 2962365.8 1
4940 2021-09-01 276476.49 2943250.2 1
4940 2021-10-01 303252.47 3143659.7 1
4940 2021-11-01 292298.37 3090468.5 1
4940 2021-12-01 268543.23 2824347.8 1预期产出:
4940 2021-08-01 281495.36 2962365.8 1
4940 2021-09-01 276476.49 2943250.2 2
4940 2021-10-01 303252.47 3143659.7 3
4940 2021-11-01 292298.37 3090468.5 4
4940 2021-12-01 268543.23 2824347.8 5我做错了什么吗?
发布于 2022-05-12 11:51:17
之所以发生这种情况,是因为:
PARTITION BY BCG.BudgetId,BCG.StartOfPeriod这将在StartOfPeriod不同的时候重置行号,这就是您的情况。因此,以下列文字取代:
PARTITION BY BCG.BudgetId提示:在PARTITION BY和ORDER BY子句的OVER部分中不应该出现相同的字段。
https://stackoverflow.com/questions/72215025
复制相似问题