我有一个奇怪的问题要问你。我有一个子查询的值,我在其中应用了窗口函数以获取运行总计,但是在此值(合法地)重复的情况下,各个总和被汇总为一个。我将粘贴的代码和结果粘贴在下面
SELECT
([SUB QUERY].[Field_A]/[SUB QUERY].[Field_B])*100 [Value],
SUM([SUB QUERY].[Field_A]/[SUB QUERY].[Field_B])*100 OVER (ORDER BY [SUB QUERY].[Field_A] DESC) RunningTotal
FROM
(
[SUB QUERY]
) Dat
结果如下所示。
Value RunningTotal
17.50501775 17.51
15.7074377 48.92
15.7074377 48.92
10.12725342 59.05
8.098755369 67.15
7.450983484 74.6
6.886517246 81.48
6.842160695 88.33
6.839469823 95.17
4.83496681 100
如您所见,第二行和第三行的值均为15.7074377,但是它们作为单个值31.4148754被添加到运行总计中。第2行的运行总计应为33.21,第4行是正确的。
你知道这里发生了什么吗?
预先感谢
答案 0 :(得分:0)
根据您的信息有点猜测,但是我认为这里的问题是您实际上需要总和。您可以使用CTE解决此问题,也可以尝试以下操作:
SELECT
([SUB QUERY].[Field_A]/[SUB QUERY].[Field_B])*100 [Value],
SUM (SUM([SUB QUERY].[Field_A]/[SUB QUERY].[Field_B])*100 OVER (ORDER BY [SUB QUERY].[Field_A] DESC)) RunningTotal
FROM ([SUB QUERY]) AS Dat
答案 1 :(得分:0)
很遗憾,我无法显示数据,因为它们非常敏感,并且指示我不要这样做。
好消息是,我找到了答案(here),因为我正在对窗口函数中用于ORDER BY的同一列求和,如果它们相同,它将汇总所有连续值。
如果您想看的话,这将展示出重点
DECLARE @Staging TABLE (Subtotal INT)
INSERT INTO
@Staging (SubTotal)
VALUES
(1),(2),(3),(3),(5),(6),(7),(8),(9),(10)
SELECT
Subtotal,
SUM(SubTotal) OVER (ORDER BY SubTotal) RunningTotal
FROM
@Staging
请注意,重复的3遭受与我上述相同的问题。通过在子查询中添加ROW_NUMBER()OVER(按ORDER BY Field_A DESC),我可以按新ID进行排序,它就像一个超级按钮一样工作。