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

Langage SQL Discussion :

2 requetes en 1


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Points : 70
    Points
    70
    Par défaut 2 requetes en 1
    Bonjour,
    Voila je voudrais regrouper 2 requetes en 1

    la requete 1 a pour but de compter le nombre d'avoirs dans le mois,
    dont la difference entre la date de l'avoir et de la facture annulé soit superieur à 5jours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT	
    	Table1.[Responsibility Center] "Agence",
    	COUNT(Table2.No_) "Avoirs"
     
    FROM 	dbo.[SOCIETE$Sales Cr_Memo Header] Table1,
    	dbo.[SOCIETE$Sales Invoice Header] Table2
     
    WHERE 	Table1.[Applies-to Doc_ No_] = Table2.No_  
    	AND DATEDIFF(day,Table2.[Posting Date],Table1.[Posting Date])>5
    	AND Table1.[Posting Date] BETWEEN '01/01/09' AND '31/05/09'
    	AND Table1.[Facture Acompte]<>1
    	AND Table1.[Lettrage Acompte]=0
    GROUP BY Table1.[Responsibility Center]
    ORDER BY Table1.[Responsibility Center]
    Résultat :
    Agence Nombre
    Agence1 3
    Agence2 1
    Agence3 2

    La 2 requete compte le nombre de facture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT	[Responsibility Center] "Agence",	
    	COUNT(No_) "Factures"
    FROM 	dbo.[SOCIETE$Sales Invoice Header]
    WHERE 	[Posting Date] BETWEEN '01/01/09' AND '31/05/09'
    	AND [Facture Acompte]<>1
    GROUP BY [Responsibility Center]
    ORDER BY [Responsibility Center]
    Résultat :
    Agence Nombre
    Agence1 3
    Agence3 2

    Je voudrais les imbriquer pour avoir le resultat suivant :

    Résultat :
    Agence Avoirs Factures
    Agence1 3 3
    Agence2 1
    Agence3 2 2

    si vous avez une solution je suis preneur. en sachant que je debute
    MERCI

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 948
    Points : 5 847
    Points
    5 847
    Par défaut
    Salut,

    Un portage tel que donne quelque chose du style:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    select agence,max(avoirs) as avoirs,max(factures) as factures
    from (
    SELECT
    	Table1.[Responsibility Center] "Agence",
    	COUNT(Table2.No_) "Avoirs",
    	NULL as factures
     
    FROM 	dbo.[SOCIETE$Sales Cr_Memo Header] Table1,
    	dbo.[SOCIETE$Sales Invoice Header] Table2
     
    WHERE 	Table1.[Applies-TO Doc_ No_] = Table2.No_
    	AND DATEDIFF(day,Table2.[Posting Date],Table1.[Posting Date])>5
    	AND Table1.[Posting Date] BETWEEN '01/01/09' AND '31/05/09'
    	AND Table1.[Facture Acompte]<>1
    	AND Table1.[Lettrage Acompte]=0
    GROUP BY Table1.[Responsibility Center]
    UNION ALL
    SELECT	[Responsibility Center] "Agence",
           NULL as avoirs,
    	COUNT(No_) "Factures"
    FROM 	dbo.[SOCIETE$Sales Invoice Header]
    WHERE 	[Posting Date] BETWEEN '01/01/09' AND '31/05/09'
    	AND [Facture Acompte]<>1
    GROUP BY [Responsibility Center]
    )
    group by agence
    ORDER BY agence

  3. #3
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Tu dois aussi pouvoir simplement faire la jointure entre les deux :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    SELECT a.agence, a.avoirs, b.factures
    FROM (
    SELECT
    	Table1.[Responsibility Center] "Agence",
    	COUNT(Table2.No_) "Avoirs",
    	NULL AS factures
     
    FROM 	dbo.[SOCIETE$Sales Cr_Memo Header] Table1,
    	dbo.[SOCIETE$Sales Invoice Header] Table2
     
    WHERE 	Table1.[Applies-TO Doc_ No_] = Table2.No_
    	AND DATEDIFF(day,Table2.[Posting Date],Table1.[Posting Date])>5
    	AND Table1.[Posting Date] BETWEEN '01/01/09' AND '31/05/09'
    	AND Table1.[Facture Acompte]<>1
    	AND Table1.[Lettrage Acompte]=0
    GROUP BY Table1.[Responsibility Center]) a
    JOIN (
    SELECT	[Responsibility Center] "Agence",
           NULL AS avoirs,
    	COUNT(No_) "Factures"
    FROM 	dbo.[SOCIETE$Sales Invoice Header]
    WHERE 	[Posting Date] BETWEEN '01/01/09' AND '31/05/09'
    	AND [Facture Acompte]<>1
    GROUP BY [Responsibility Center]
    ) b
    ON a.agence = b.agence
    GROUP BY agence
    ORDER BY agence

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Points : 70
    Points
    70
    Par défaut
    Bonjour skuatamad et pacmann
    merci pour vos reponses rapide.
    j'ai un petit soucis avec ta reponse skuatamad, il m'indique lorsque j'exeute la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Msg*156, Niveau*15, État*1, Ligne*26
    Syntaxe incorrecte vers le mot clé 'GROUP'.
    tandis que pour ta reponse pacmann j'ai ca comme message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*209, Niveau*16, État*1, Ligne*27
    Nom de colonne 'agence' ambigu.
    Pouvez vous encore m'aider

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 948
    Points : 5 847
    Points
    5 847
    Par défaut
    Je ne suis pas super familier avec sql server donc je tente un peu au pif.
    Peut être que simplement il n'aimiat pas le mix des alias majuscule/minuscule et l'utilisations des "" que perso je n'utilise jamais
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    SELECT t.agence,max(t.avoirs) AS avoirs,max(t.factures) AS factures
    FROM (
    SELECT
    	Table1.[Responsibility Center] agence,
    	COUNT(Table2.No_) avoirs,
    	NULL AS factures
     
    FROM 	dbo.[SOCIETE$Sales Cr_Memo Header] Table1,
    	dbo.[SOCIETE$Sales Invoice Header] Table2
     
    WHERE 	Table1.[Applies-TO Doc_ No_] = Table2.No_
    	AND DATEDIFF(day,Table2.[Posting Date],Table1.[Posting Date])>5
    	AND Table1.[Posting Date] BETWEEN '01/01/09' AND '31/05/09'
    	AND Table1.[Facture Acompte]<>1
    	AND Table1.[Lettrage Acompte]=0
    GROUP BY Table1.[Responsibility Center]
    UNION ALL
    SELECT	[Responsibility Center] agence,
           NULL AS avoirs,
    	COUNT(No_) factures
    FROM 	dbo.[SOCIETE$Sales Invoice Header]
    WHERE 	[Posting Date] BETWEEN '01/01/09' AND '31/05/09'
    	AND [Facture Acompte]<>1
    GROUP BY [Responsibility Center]
    ) t
    GROUP BY t.agence
    ORDER BY t.agence
    Par contre pour coler à ton exemple, il faut utiliser un LEFT JOIN et donc peut être même un FULL OUTER JOIN...
    C'est pour ça que je suis repartit de ma requête avec UNION ALL, mais test quand même les JOIN.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 148
    Points : 70
    Points
    70
    Par défaut

    Super skuatamad.
    le probleme est resolu, j'aimerai etre aussi peu familier que toi pour trouver la solution
    un grand merci

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

Discussions similaires

  1. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  2. Requete requête sous sybase
    Par eddie dans le forum Sybase
    Réponses: 3
    Dernier message: 02/04/2003, 14h51
  3. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  4. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43
  5. [Kylix] Requetes Kylix pour postgres
    Par Miltown dans le forum EDI
    Réponses: 1
    Dernier message: 29/05/2002, 20h22

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