La requête ci-dessous me permet d'obtenir des données des années 2019 et 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

Je veux créer une procédure pour obtenir les données [VENTES] pour la date saisie et les données pour l'année précédente [VENTE Y-]

EX: si je tape le paramètre de procédure: @StartDate: '2019-10-01' et @EndDate: '2019-11-01' alors je devrais obtenir les données [SALES] de cette période.

Et les données de l'année précédente pour [Sales-1]: '2018-10-01' et '2018-11-01'

1
MOHAMMED SOUFIANE 3 nov. 2019 à 15:58

1 réponse

Meilleure réponse

D'après votre déclaration "Je veux créer une procédure pour obtenir les données [VENTES] pour la date saisie, et les données pour l'année précédente [VENTE Y-]" cela me dit que si vous fournissez le date 20191103 à laquelle vous souhaitez que les données de vente pour 20191103 et 20180101 à 20181231 inclus.

La logique semble étrange, mais il semble que vous en ayez juste besoin dans votre 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));

En supposant que GL_DATEPIECE est un date et non un datetime.


Sur la base des nouvelles informations:

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

Encore une fois, suppose que GL_DATEPIECE est un date, pas un datetime.

1
Larnu 3 nov. 2019 à 13:11