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 :

Aide sur une requête SQL Server


Sujet :

Développement SQL Server

  1. #1
    Membre régulier Avatar de Morad ISSOULGHANE
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Points : 94
    Points
    94
    Par défaut Aide sur une requête SQL Server
    Bonjour,
    J'ai une table Facture et une table Mission

    Mission (IDMission, TitreMission, MontantHTMission)

    Facture(IDFacture, IDMission, MontantHTFacture, MontantRecouvreeFacture, DateActivationFacture) ou IDMission est une clé étrangère qui référence la table Mission

    Je voudrais récupérer dans une requête, pour chaque mission le total du montant recouvert avant ce mois (la somme de MontantRecouvreeFacture pour les factures avant le mois passé), le Montant recouvert durant le mois actuel (la somme de MontantRecouvreeFacture pour les factures de ce mois), le Montant Total des factures émises durant ce mois (la somme de MontantHTFacture durant ce mois)

    Merci pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Pour comprendre la suite, il faut savoir que
    GETDATE() représente la date/heure de maintenant
    CONVERT(varchar(7),GETDATE(),120) va renvoyer '2009-09' si on est en septembre.
    Donc on peut comparer :
    CONVERT(varchar(7),GETDATE(),120) et
    CONVERT(varchar(7),DateActivationFacture,120)
    pour savoir comment la facture se situe par rapport au mois en cours

    Donc on fait un test sur la date de facture et on renvoie le montant demandé ou 0 (en fonction du test) dans la fonction SUM pour agréger sur IDMission

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT	IDMission,
    	SUM(CASE WHEN CONVERT(varchar(7),DateActivationFacture,120)<CONVERT(varchar(7),GETDATE(),120) THEN MontantRecouvreeFacture ELSE 0 END) As MontantRecouvreAntérieur,
    	SUM(CASE WHEN CONVERT(varchar(7),DateActivationFacture,120)=CONVERT(varchar(7),GETDATE(),120) THEN MontantRecouvreeFacture ELSE 0 END) As MontantRecouvreMoisActuel,
    	SUM(CASE WHEN CONVERT(varchar(7),DateActivationFacture,120)=CONVERT(varchar(7),GETDATE(),120) THEN MontantHTFacture ELSE 0 END) As MontantHTMoisEnCours
    FROM	Facture
    GROUP BY IDMission

    L'aspirine n'est pas fournie
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre régulier Avatar de Morad ISSOULGHANE
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Points : 94
    Points
    94
    Par défaut
    Merci pour la réponse
    Je pense que pour la comparaison des date je peux utiliser la fonction DatePart(MM,GETDATE()) qui renvoit le numero du mois (exemple 9 pour septembre)

    Dans le requête serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT	IDMission,
    	SUM(CASE WHEN DATEPART(MM,DateActivationFacture)<DATEPART(MM,GETDATE()) THEN MontantRecouvreeFacture ELSE 0 END) AS MontantRecouvreAntérieur,
    	SUM(CASE WHEN DATEPART(MM,DateActivationFacture)=DATEPART(MM,GETDATE()) THEN MontantRecouvreeFacture ELSE 0 END) AS MontantRecouvreMoisActuel,
    	SUM(CASE WHEN DATEPART(MM,DateActivationFacture)>DATEPART(MM,GETDATE()) THEN MontantHTFacture ELSE 0 END) AS MontantHTMoisEnCours
    FROM	Facture
    GROUP BY IDMission
    Merci beaucoup

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 123
    Points : 77
    Points
    77
    Par défaut
    Je pense que l'utilisation de datepart dans ce cas là est risquée, surtout si les factures d'une mission s'étalent sur deux années différentes d'où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select datepart(mm, getdate()) -- 30-09-2009
    select datepart(mm, dateadd(year,-1, getdate())) -- 30-09-2008
    retourne le même résultat '9'

  5. #5
    Membre régulier Avatar de Morad ISSOULGHANE
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2009
    Messages : 98
    Points : 94
    Points
    94
    Par défaut
    oui, parfaitement raison

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. demande d'aide sur une requête sql serveur
    Par PHPkoala dans le forum Développement
    Réponses: 8
    Dernier message: 30/09/2009, 15h11
  2. aide sur une requête sql
    Par sanach dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 27/02/2008, 16h43
  3. aide sur une requête sql
    Par sanach dans le forum Développement
    Réponses: 9
    Dernier message: 17/10/2007, 20h42
  4. aide sur une requête sql
    Par sanach dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/10/2007, 20h42

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