Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 加窗求和查询,给出一个;因为它不包含在任何一个聚合中;错误_Sql Server_Aggregate Functions - Fatal编程技术网

Sql server 加窗求和查询,给出一个;因为它不包含在任何一个聚合中;错误

Sql server 加窗求和查询,给出一个;因为它不包含在任何一个聚合中;错误,sql-server,aggregate-functions,Sql Server,Aggregate Functions,我有以下疑问: select d.ShortDate, b.BranchCode, sum(home_net_change_calc) as Period_HomeNet_Denom, sum(oper_net_change_calc) as Period_OperNet_Denom, sum(budget_home

我有以下疑问:

        select  d.ShortDate, 
                    b.BranchCode,
                    sum(home_net_change_calc) as Period_HomeNet_Denom,
                    sum(oper_net_change_calc) as Period_OperNet_Denom,

                    sum(budget_home_net_change_calc) as Period_BudgetHomeNet_Denom,
                    sum(budget_oper_net_change_calc) as Period_BudgetOperNet_Denom,

                    sum(oper_net_change_calc) over (partition by b.BranchCode order by d.ShortDate rows between unbounded preceding and current row  ) as Range_HomeNet_Denom

                 from FinanceFacts as fact
                   join DimBranch b on fact.BranchKey = b.BranchKey
                   join DimDate d on d.DateKey = fact.DateKey
                where d.ShortDate between '2016-09-01' and '2017-09-30' 
                    and b.BranchCode = '113'
                group by d.ShortDate, 
                    b.BranchCode
带窗口sum函数的行导致错误:“FinanceFacts.oper\u net\u change\u calc”列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

这对我来说没有任何意义-我试图对该字段求和,而不是按它分组

如果不清楚的话,查询的目标是对每个ShortDate值的度量值求和,然后还得到所有日期的总值


我正在使用SQL Server 2014

我在这里找到了答案:

如果我将进攻线从:

   sum(oper_net_change_calc) over (partition by b.BranchCode order by d.ShortDate rows between unbounded preceding and current row  ) as Range_HomeNet_Denom
致:


有人能解释一下它是如何工作的吗?

我在这里找到了答案:

如果我将进攻线从:

   sum(oper_net_change_calc) over (partition by b.BranchCode order by d.ShortDate rows between unbounded preceding and current row  ) as Range_HomeNet_Denom
致:


有人能解释一下它是如何工作的吗?

窗口函数应用于基本查询的结果集-当
选择
ing时,但在所有其他子句之后,如
WHERE
分组和
排序。
因此,当您在带分组的查询中使用
OVER
子句时,您可以使用该命令指示SQL server对其自己的行集进行操作,但对整个查询的数据集进行操作

因此,当您使用
SUM(oper\u net\u change\u calc)OVER(PARTITION by b.BranchCode)
时,SQL Server将
SUM()
解释为
groupby
子句的一部分,而不是
OVER()
子句的一部分,因此您缺少一个应用该
OVER()
子句的函数


关于窗口函数的工作原理,可以在这里找到很好的解释:

窗口函数应用于基本查询的结果集-当
选择
ing时,但在所有其他子句之后,如
WHERE
groupby
ORDER BY
。 因此,当您在带分组的查询中使用
OVER
子句时,您可以使用该命令指示SQL server对其自己的行集进行操作,但对整个查询的数据集进行操作

因此,当您使用
SUM(oper\u net\u change\u calc)OVER(PARTITION by b.BranchCode)
时,SQL Server将
SUM()
解释为
groupby
子句的一部分,而不是
OVER()
子句的一部分,因此您缺少一个应用该
OVER()
子句的函数


有关窗口函数如何工作的详细说明,请参见此处:

谢谢-这非常有帮助。连第一句话都让灯泡亮了!谢谢,这帮了大忙。连第一句话都让灯泡亮了!我真的很想解释一下。这对我也很有用。我真的很想解释一下。这对我也有用。