繁体   English   中英

SQL Server:以其他条件开头

[英]SQL Server : PRECEDING with another condition

我有一个运行良好的查询:该查询是要查找过去3个月和去年的总和和平均值。 AwardCode正常,直到我收到一个新请求,即使用AwardCode将查询细分为更多详细信息。

那么如何包括呢?

我的意思是这个部分

SUM(1.0 * InvolTerm) OVER (ORDER BY Calendar_Date ASC 
                           ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS  InvolMov3Mth,

我想根据AwardCode查找最近3个月。

我正在工作的原始查询是

SELECT 
    Calendar_Date, Mth,  NoOfEmp, MaleCount, FemaleCount,
    SUM(1.0*InvolTerm) OVER (ORDER BY Calendar_Date ASC 
                             ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS  InvolMov3Mth,
    SUM(1.0*TotalTerm) OVER (ORDER BY Calendar_Date ASC 
                             ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) AS TermSum12Mth 
FROM @X

结果是

在此处输入图片说明

但是现在我需要添加另一个组AwardCode

SELECT 
    Mth,  AwardCode, NoOfEmp, MaleCount, FemaleCount,
    SUM(1.0 * InvolTerm) OVER (ORDER BY Calendar_Date ASC 
                               ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS  InvolMov3Mth,
    SUM(1.0 * TotalTerm) OVER (ORDER BY Calendar_Date ASC 
                               ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) AS TermSum12Mth 
FROM @X

结果将是这样

在此处输入图片说明

您会注意到整个期间的InvolMov3Mth和TermSum12Mth的总和与上面的查询不匹配

我想我找到了问题的答案。

我在ORDER BY之前使用PARTITION BY AwardCode

似乎在工作。

SUM(1.0*TotalTerm) OVER (PARTITION BY AwardCode ORDER BY Calendar_Date ASC 
                        ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) AS TermSum12Mth,

是。 “分区依据”将使其适合您的要求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM