MsSQL   发布时间:2022-05-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了sql – 为每2行运行计数大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在计算如下两行的运行次数,
create table SALEs
(
     EmpId INT,Yr INT,SALEs decimaL(8,2)
)

INSERT INTO SALEs (EmpId,Yr,SALEs)
VALUES (1,2005,12000),(1,2006,18000),2007,25000),2008,2009,(2,15000),6000),6000)

SELECT 
    EmpId,SALEs,SUM(SALEs) OVER (PARTITION BY empid ORDER BY empid ROWS betweeN 2 PRECEDING AND CURRENT ROW ) AS @R_454_10586@lSALEs2
FROM 
    SALEs
@H_696_4@输出:

EmpId   Yr      SALEs   @R_454_10586@lSALEs2
-----------------------------------
  1     2005    12000      12000
  1     2006    18000      30000
  1     2007    25000      55000
  1     2008    25000      68000
  1     2009    25000      75000
  2     2005    15000      15000
  2     2006     6000      21000
  2     2007     6000      27000
@H_696_4@但预期产出:

EmpId   Yr     SALEs    @R_454_10586@lSALEs2
-----------------------------------
  1     2005    12000   12000
  1     2006    18000   30000
  1     2007    25000   25000   
  1     2008    25000   50000
  1     2009    25000   25000   
  2     2005    15000   15000
  2     2006     6000   21000
  2     2007     6000    6000
@H_696_4@在这个查询中我做错了什么?

@H_696_4@注意:sql Servre版本是2012.

解决方法

表达方式:
SUM(SALEs) OVER (PARTITION BY empid 
                 ORDER BY empid 
                 ROWS betweeN 2 PRECEDING AND CURRENT ROW)
@H_696_4@计算虑当前行和其前面的2行的总和.所以它实际上是计算一个滚动总和,这是你真正不想要的.

@H_696_4@我想你实际上正在寻找如下的东西:

;WITH CTE_Group AS (
    SELECT EmpId,(ROW_numbER() OVER (PARTITION BY empid ORDER BY yr) + 1 ) / 2 AS grp
    FROM SALEs      
)
SELECT EmpId,SUM(SALEs) OVER (PARTITION BY empid,grp 
                        ORDER BY yr) AS @R_454_10586@lSALEs2
FROM CTE_Group
@H_696_4@上述查询使用CTE计算字段grp:该字段的值对于empid分区的前两个记录为1,对于接下来的两个记录为2,依此类推.

@H_696_4@使用grp,我们可以按照OP的要求,计算2组的销售运行总计.

@H_696_4@Demo here

@H_696_4@编辑:

@H_696_4@为了抵消更大的一组记录,尝试使用(信用@max Szczurek指出这一点):

(ROW_numbER() OVER (PARTITION BY empid ORDER BY yr) - 1 ) / n AS grp
@H_696_4@其中n是每个组包含的记录数.

大佬总结

以上是大佬教程为你收集整理的sql – 为每2行运行计数全部内容,希望文章能够帮你解决sql – 为每2行运行计数所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: