Хранимая процедура с параметром date и date-1 - PullRequest
1 голос
/ 03 ноября 2019

Приведенный ниже запрос позволяет мне получать данные за 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 Y -]

EX: если я введу параметр процедуры: @StartDate: '2019-10-01' & @EndDate: '2019-11-01', тогда я должен получить [SALES]данные за этот период.

И данные предыдущего года для [Sales-1]: '2018-10-01' & '2018-11-01'

1 Ответ

1 голос
/ 03 ноября 2019

Согласно вашему заявлению "Я хочу создать процедуру для получения данных [ПРОДАЖ] для введенной даты и данных за предыдущий год [ПРОДАЖ Y -]" это говорит мне, что если выукажите дату 20191103, для которой вы хотите получить данные о продажах для 20191103 и 20180101 до 20181231 включительно.

Логика кажется странной, но, похоже, вам просто нужно это в вашем 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_DATEPIECE является date, а не datetime.


На основе новой информации:

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

Снова, предполагает, что GL_DATEPIECE является date, а не datetime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...