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 :

[SQL Server 8] Regrouper 2 requêtes en une ?


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut [SQL Server 8] Regrouper 2 requêtes en une ?
    Bonjour les zamis

    J'ai une petite question pour vous.

    Ah oui premierement j'utilise SQL avec SQL-SERVER v.8

    Je dois faire une requete qui lit des valeurs dans deux tables différentes et je me demande si c'est possible de faire une seule requete pour obtenir les résultats. Je m'explique.

    Dans la table budgetfin, je dois lire les valeurs de la colonne bc_cs pour les semaines 1 a 52. Je dois également lire les valeurs de la colonne pr_cs pour les semaines 26 a 52. Les valeurs de pr_cs des semaines 1 a 25 je les retrouve dans une autre table, statsvente.

    budgetfin
    no_semaine bc_cs pr_cs
    1__________12____10
    2__________13____52
    ...
    25_________43____54
    26_________42____62
    27_________54____84
    ...
    52 _________12____43

    statsvente
    no_semaine pr_cs
    1___________54
    2___________65
    ...
    25__________65

    et je voudrais une reponse qui ressemble a ceci

    réponse
    no_semaine pr_cs bc_cs
    1___________ 54_____10
    2 ___________65_____52
    ...
    25___________65_____54
    26___________42_____62
    27___________54_____84...
    52___________12_____ 43

    est-ce que c'est possible ou je cherche pour rien? Si c'est possible merci de me donner un coup de main parce que je ne trouve rien

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Est-ce possible oui!
    2 solutions au moins
    1/En utilisant l'instructon Case de SQL Server regarde l'aide
    2/Solution dépendant moins de ton SGBD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT no_semaine,bc_cs, t_pr_cs.pr_s
    From Budgetfin b
    inner join 
    (Select no_semaine, pr_cs from Budgetfin bf2
      where no_semaine>25
     union Select no_semaine, pr_cs from statsvente
    where no_semaine<=25)  as t_pr_cs
    on b.no_semaine=t_pr_cs.no_semaine

    3/Je crois que j'ai compliqué au 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT no_semaine,bc_cs, pr_cs
    From Budgetfin b
      where no_semaine>25
     union 
    Select s.no_semaine as no_semaine, b.bc_cs, s.pr_cs 
    from statsvente s
    inner join budjetfin b
    on b.no_semaine=s.no_semaine
    where s.no_semaine<=25 
    on b.no_semaine=t_pr_cs.no_semaine
    a+
    Soazig

  3. #3
    Membre habitué Avatar de Baquardie
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    267
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 267
    Points : 144
    Points
    144
    Par défaut


    ahouuummmm soazig !!!! J'ai utilisé ta suggestion numéro deux (la 3e ne fonctionne pas du tout puisque je dois utiliser les semaines 1 a 52 pour le bc....).

    Voici ce que ma requete finale ressemble -- y sont inclus les clauses where nécessaires au fonctionnement finale. J'ai également rajouté un case dans mon select qui m'a permit d'enlever les NULL dans la réponse...

    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
    select b.semaine, sum(bc_cs) as "BC", (case when sum(t_pr_cs.pr_cs) IS NULL then 0 else sum(t_pr_cs.pr_cs) end) as "PR"
    from budgetfin b
    full join
    	(
    	 	select semaine, pr_cs
    	 	from budgetfin bf2
    	 	where semaine > 25 and annee = '2004' and noclientdevin = '3619W' and  
              	nomarque = 'ALL' and noformat = 'C6X1.36LT' and nogroupe = 'JPP'  and type = 'VENTES'
     
    	 UNION
    	 	select semaine, pr_qte
    		from statsvente join lassonde.dbo.iim on (iprod = noproduit)
    		where statsvente.semaine <= 25 and statsvente.annee =  2004   
                    	 and noclientdevin = '3619W'  
                    	 and imarqu = 'ALL'  
                    	 and iforma = 'C6X1.36LT'  
                    	 and igroup = 'JPP' 
     
    	) as t_pr_cs
    on b.semaine = t_pr_cs.semaine
    where b.annee = '2004' and b.noclientdevin = '3619W' and  
          b.nomarque = 'ALL' and b.noformat = 'C6X1.36LT' and b.nogroupe = 'JPP'  and b.type = 'VENTES'
    group by b.semaine
    order by b.semaine
    encore Soazig

    Il ne me reste qu'a rendre les paramètres du where modiables!! Un jeu d'enfant rendu la!

    A plus! Jretourne au boulot!

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Citation Envoyé par Baquardie
    :la 3e ne fonctionne pas du tout puisque je dois utiliser les semaines 1 a 52 pour le bc.
    Je ne comprend pas pourquoi . Dans la troisème il y a un inner join pour que tu récupère ton bc_cs, et donc tu devrais avoir tout ce qu'il te faut

    Pour l'utilisation que tu fait du Case, un ISNULL ou coalesce aurait suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select b.semaine, sum(bc_cs) as "BC",ISNULL(sum(t_pr_cs.pr_cs), 0) as "PR"
    from budgetfin b ...
    a+
    Soazig

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/04/2008, 16h17
  2. Réponses: 2
    Dernier message: 30/08/2007, 23h03
  3. [MS SQL SERVER 7.0]Doublons lors d'une requête
    Par massif dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/12/2006, 11h35
  4. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54
  5. [SQL server] Comment Fusionner des données dans une requête
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/07/2005, 15h24

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