窗口总和无法正确显示数据

时间:2018-08-22 08:47:37

标签: tsql sum subquery

我有一个奇怪的问题要问你。我有一个子查询的值,我在其中应用了窗口函数以获取运行总计,但是在此值(合法地)重复的情况下,各个总和被汇总为一个。我将粘贴的代码和结果粘贴在下面

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行是正确的。

你知道这里发生了什么吗?

预先感谢

2 个答案:

答案 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进行排序,它就像一个超级按钮一样工作。