Tsql 窗口总和未正确显示数据

Tsql 窗口总和未正确显示数据,tsql,sum,subquery,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].

我有个奇怪的问题要问你。我有一个来自子查询的值,我正在对该子查询应用一个窗口函数,以获得一个运行总数。然而,如果该值被重复(合法地),则各个总和被汇总为一个。我将在下面粘贴我的修订代码和结果

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
如您所见,第2行和第3行的值均为15.7074377,但它们将作为单个值31.4148754添加到运行总数中。2号线的运行总数应为33.21,4号线是正确的

知道这里发生了什么吗


提前感谢

根据您的信息,这有点像猜测,但我认为这里的问题是您实际上需要总和。您可以使用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

不幸的是,我不能显示数据,因为它非常敏感,我被指示不要显示

好消息是,我找到了答案(),因为我对窗口函数中用于排序的同一列求和,如果它们相同,它将汇总所有连续值

如果你想看的话,这将证明这一点

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()(ORDER By Field_A DESC),我可以按照新ID进行排序,它的工作非常有魅力。

请添加源数据,这意味着创建表和插入示例的查询data@Ronen非常感谢你的答复,非常欢迎你,但是如果你仍然没有得到你的答复,那么我强烈建议你按照要求去做,而不是等我们。我们有一些关于查询结果的信息,但没有关于源数据的信息,也没有可以使用的源数据。给我们重现问题的工具;-)谢谢你的回复