IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Effectuer une somme sur un intervalle de dates


Sujet :

Développement SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Effectuer une somme sur un intervalle de dates
    Voici mon code qui me renvoie le résultat attendu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT C.Name, CC.*
    FROM 
    	(	
    	SELECT I.CustNum,
    		   SUM(CASE WHEN I.InvoiceDate = cast (GETDATE() as DATE) THEN I.InvoiceAmt END) as Aujourdhui, 
    		   SUM(CASE WHEN (I.InvoiceDate <= cast (GETDATE() - 1 as DATE) AND I.InvoiceDate > cast (GETDATE() - 7 as DATE)) THEN I.InvoiceAmt END) as Jours_1_7,
    		   SUM(CASE WHEN (I.InvoiceDate <= cast (GETDATE() - 7 as DATE) AND I.InvoiceDate > cast (GETDATE() - 14 as DATE)) THEN I.InvoiceAmt END) as Jours_7_14,
    		   SUM(CASE WHEN (I.InvoiceDate <= cast (GETDATE() - 14 as DATE) AND I.InvoiceDate > cast (GETDATE() - 30 as DATE)) THEN I.InvoiceAmt END) as Jours_14_30,
    		   SUM(CASE WHEN (I.InvoiceDate <= cast (GETDATE() - 30 as DATE) AND I.InvoiceDate > cast (GETDATE() - 60 as DATE)) THEN I.InvoiceAmt END) as Jours_30_60,
    		   SUM(CASE WHEN I.InvoiceDate <= cast (GETDATE() - 60 as DATE)  THEN I.InvoiceAmt END) as Jours_60	   
    	FROM InvcHead I	
    	WHERE OpenInvoice = 1
    	GROUP BY I.CustNum
    	) CC
    	INNER JOIN Customer C
    	ON C.CustNum = CC.CustNum
    ORDER BY C.Name
    Autrement dit, j'effectue une somme sur plusieurs intervalles de dates. Ma question: J'aimerais savoir s'il existe une façon plus élégante d'obtenir les résultats? En utilisant une CTE?

    Merci à l'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Respectez la charte de postage : http://www.developpez.net/forums/d96...vement-poster/

    Sans cela on ne peut vous aider !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Vous pourriez isoler vos calcul de date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SELECT
     SUM(CASE WHEN I.InvoiceDate = D0 THEN I.InvoiceAmt END) AS Aujourdhui
    , SUM(CASE WHEN (I.InvoiceDate < D0 AND I.InvoiceDate > D7 THEN I.InvoiceAmt END) AS Jours_1_7,
     [...]
    FROM ...
    CROSS JOIN (
     VALUES(
      DATEADD(DD, DATEDIFF(DD, 0, GETDATE()) - 0, 0)
     ,  DATEADD(DD, DATEDIFF(DD, 0, GETDATE()) - 7, 0)
     ,  DATEADD(DD, DATEDIFF(DD, 0, GETDATE()) - 14, 0)
     )
    ) AS Dates (
     D0
     , D7
     , D14
    )
    Most Valued Pas mvp

Discussions similaires

  1. Réponses: 8
    Dernier message: 31/10/2014, 12h22
  2. [Débutant] Effectuer une somme sur un champ de mon DataSource
    Par miniil dans le forum ASP.NET
    Réponses: 4
    Dernier message: 05/09/2013, 12h08
  3. Réponses: 6
    Dernier message: 11/04/2007, 16h54
  4. Réponses: 9
    Dernier message: 04/01/2007, 11h58
  5. Réponses: 1
    Dernier message: 28/03/2005, 12h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo