【问题标题】:Stored procedure with date and date-1 parameter带有日期和 date-1 参数的存储过程
【发布时间】:2019-11-03 12:58:58
【问题描述】:

下面的查询允许我获取 2019 年和 2018 年的数据:

SELECT
    [DATE] = GL_DATEPIECE
    [STORE] = GL_ETABLISSEMENT,
    [RAYON] = GL_FAMILLENIV1,
    [SALES] = SUM(CASE WHEN YEAR(GL_DATEPIECE) = 2019 THEN [GL_TOTALTTC] ELSE 0 END)
    [SALES Y-] = SUM(CASE WHEN YEAR(GL_DATEPIECE) = 2018 THEN [GL_TOTALTTC] ELSE 0 END)
FROM GCLIGNEARTDIM
WHERE 
    GL_DATEPIECE BETWEEN '2019-11-01' AND '2019-11-02'
    OR GL_DATEPIECE BETWEEN '2018-11-01' AND '2018-11-02'
GROUP BY GL_ETABLISSEMENT, GL_FAMILLENIV1, GL_DATEPIECE

我想创建一个程序来获取输入日期的数据 [SALES] 和上一年的数据 [SALES Y-]

EX : 如果我输入程序参数:@StartDate : '2019-10-01' & @EndDate : '2019-11-01' 那么我应该得到这段时期的 [SALES] 数据。

[Sales-1] 上一年的数据:'2018-10-01' & '2018-11-01'

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    按照你的说法“我想创建一个程序来获取输入日期的数据 [SALES] 和上一年的数据 [SALES Y-]” 这告诉我,如果您提供日期 20191103 您想要 201911032018010120181231 的销售数据。

    逻辑看起来很奇怪,但似乎你只需要在你的WHERE

    WHERE GL_DATEPIECE = @DateParam
       OR (GL_DATEPIECE >= DATEADD(YEAR, DATEDIFF(YEAR, 0, @DataParam)-1,0)
      AND  GL_DATEPIECE < DATEADD(YEAR, DATEDIFF(YEAR, 0, @DataParam),0));
    

    假设GL_DATEPIECEdate 而不是datetime


    根据新信息:

    WHERE (GL_DATEPIECE >= @StartDate AND GL_DATEPIECE <= @EndDate)
       OR (GL_DATEPIECE >= DATEADD(YEAR, -1, @StartDate) AND GL_DATEPIECE <= DATEADD(YEAR, -1, @EndDate))
    

    再次假设GL_DATEPIECEdate,而不是datetime

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 2020-11-11
      • 2016-05-13
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 2012-01-12
      相关资源
      最近更新 更多