使用分区查询复制数据

时间:2018-11-29 21:39:22

标签: sql sql-server tsql

我编写了以下分区查询,以显示多年来的客户订单滚动金额,但是却获得了重复的记录,并且不确定在这里我做错了什么。

SELECT
    sc.Cust_no,
    YEAR(sc.invoice_date),
    SUM([SQFT]) 
        OVER (PARTITION BY sc.Cust_no, YEAR(sc.invoice_date) 
        ORDER BY YEAR(sc.invoice_date)
     ) as Rolling_Sum
FROM ns.SAR_Combined sc
GROUP BY
    Cust_no,
    sqft,
    YEAR(sc.invoice_date)

输出是什么样子

Cust_no Year    Sqft
0001    2015    10806.15
0001    2015    10806.15
0001    2015    10806.15
0001    2015    10806.15
0002    2013    26520
0002    2013    26520
0002    2013    26520
0002    2013    26520
0002    2013    26520

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

我猜想您想要累积的总和。如果是这样,则需要在聚合上使用窗口函数:

Select sc.Cust_no, year(sc.invoice_date),
       sum(Sum([SQFT])) over (partition by sc.Cust_no, year(sc.invoice_date)
                              order by year(sc.invoice_date)
                             ) as Rolling_Sum
from ns.SAR_Combined sc
group by Cust_no, year(sc.invoice_date);

您获得“重复”的原因是由于sqft子句中的group by。但是,仅删除它并不能解决您的问题-还需要更改Rolling_Sum的计算。