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] Sous Requete dans le select


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 38
    Points : 42
    Points
    42
    Par défaut [SQL Server] Sous Requete dans le select
    Bonjour,

    J'ai une probleme avec la requete suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT 
        num_telephone, count(*) as nbAppTot, 
        sum(duree_fact) as dureeTot, 
        sum(montant_appel) as montantTot,
        (select count(*) as nbAppNat, sum(duree_fact) as dureeNat,
                 sum(montant_appel) as montantNat 
           from facture_appel 
          where num_facture = 'PROV061015F00000897' 
            and ZONE_APPEL in ('', 'F') 
            and facture_appel.num_telephone = f.num_telephone)
      from facture_appel f 
     where num_facture='PROV061015F00000897' group by num_telephone
    Le but de cette requete est de sortir pour chaque ligne :
    Le numero, le nbTotal, le tpsTotal, le MontantTotal, Le nb National, Le temps National, le montant nationa

    Le probleme est le suivant : SQL Server me ressort l'erreur suivante :
    "Une seule expression peut être spécifiée dans la liste de sélection quand la sous-requête n'est pas introduite par EXISTS."

    Comment pourrais-je corriger ce probleme (j'aimerais gerer cette requete ci-dessus en une requete.

    Merci d'avance!!!

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Tu ne peux effectivement insérer ta sous-requête dans la liste des champs que si elle ne retourne qu'un seul champ

    je te prosose de passer ta sous-requête en tant que pseudo-table, comme ceci :

    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
    SELECT 
        F.num_telephone, count(F.*) AS nbAppTot, 
        sum(F.duree_fact) AS dureeTot, 
        sum(F.montant_appel) AS montantTot,
        FA.nbAppNat,
        FA.dureeNat,
        FA.montantNat 
      FROM facture_appel F INNER JOIN 
        (SELECT facture_appel, count(*) AS nbAppNat,
                sum(duree_fact) AS dureeNat, 
                sum(montant_appel) AS montantNat 
           FROM facture_appel 
          WHERE ZONE_APPEL IN ('', 'F')) FA
        ON FA.num_facture = F.num_Facture AND FA.num_telephone = F.num_telephone
     WHERE F.num_facture = 'PROV061015F00000897' 
    GROUP BY F.num_telephone, FA.nbAppNat, FA.dureeNat, FA.montantNat
    Bon, sans jeu de tests, je n'ai pas vérifié la validité de cette requête, donc je te laisse tester
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 38
    Points : 42
    Points
    42
    Par défaut Merci!
    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
     
    SELECT 
        F.num_telephone, count(F.duree_fact) AS nbAppTot, 
        sum(F.duree_fact) AS dureeTot, 
        sum(F.montant_appel) AS montantTot,   
        FA.nbAppNat,
        FA.dureeNat,
        FA.montantNat 
      FROM facture_appel F JOIN 
        (SELECT num_facture, num_telephone, count(*) AS nbAppNat,
                sum(duree_fact) AS dureeNat, 
                sum(montant_appel) AS montantNat 
           FROM facture_appel 
          WHERE ZONE_APPEL IN ('', 'F')
          GROUP BY NUM_FACTURE, NUM_TELEPHONE)  FA
        ON FA.num_facture = F.num_Facture AND FA.num_telephone = F.num_telephone
     WHERE F.num_facture = 'PROV061015F00000897' 
    GROUP BY F.num_telephone, FA.nbAppNat, FA.dureeNat, FA.montantNat
    Voila la requete qui marche Merci à toi !!

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

Discussions similaires

  1. [SQL Server 2008] Requete stockée dans la base de données
    Par hwoarang dans le forum Développement
    Réponses: 3
    Dernier message: 30/09/2010, 14h42
  2. copie bd access dans bd sql server sous code vb
    Par asmae2205 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 30/03/2009, 10h31
  3. [sql server 2005] requete de selection
    Par zitoun dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/04/2007, 11h45
  4. Utiliser Resultat D4une Sous Requete Dans Un Select
    Par loiseaud dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/08/2006, 11h42
  5. [SQL-Server] Sous requete dans une procédure stockée
    Par Worldofdada dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/02/2006, 11h18

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