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 :

Addition en SQL..


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 118
    Points : 73
    Points
    73
    Par défaut Addition en SQL..
    Bonjour,

    Je voudrais réaliser une requete de type :

    SELECT "Champ a calculé"
    FROM "Plusieurs Table"
    WHERE "Champ a calculé" = (
    "RESULTAT D'UNE REQUETE 1" +
    "RESULTAT D'UNE REQUETE 2" +
    "RESULTAT D'UNE REQUETE 3");

    Les requetes 1,2 et 3 renvoies bien un SEUL entier.
    Comment faire ?

    Voici mon code actuel (qui n'est pas bon) :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    SELECT Facture.MONTANT
    FROM Facture
    WHERE Facture.MONTANT =
    	(//Selection Prix Forfait de base
    		(SELECT Tarification.prix
    		FROM Tarification,Forfait,Contrat,Vehicule,Facture
    		WHERE Tarification.IDFORFAIT = Forfait.IDFORFAIT
    		AND Forfait.IDFORFAIT = Contrat.IDFORFAIT
    		AND Contrat.IDVEHICULE = Vehicule.IDVEHICULE
    		AND Facture.IDCONTRAT = Contrat.IDCONTRAT
    		AND Tarification.IDCATEGO = Vehicule.IDCATEGO
    		AND Facture.IDCONTRAT = "LPD20054328";)
    	 +
    	//Selection Prix Kms Supplémentaires
    		(SELECT Distinct Categorie.PRIXKMSUP*Facture.KMSUP as KM  
    		FROM Tarification,Forfait,Contrat,Categorie,Facture,Vehicule
    		WHERE Vehicule.IDCATEGO = Categorie.IDCATEGO
    		AND Contrat.IDCONTRAT = Facture.IDCONTRAT
    		AND Contrat.IDVEHICULE = Vehicule.IDVEHICULE
    		AND Facture.IDCONTRAT = "LPD20054328";)
    	 +
    	//Selection Prix Jours Supplémentaires
    		(SELECT Distinct Categorie.PRIXKMSUP*Facture.KMSUP as KM  
    		FROM Tarification,Forfait,Contrat,Categorie,Facture,Vehicule
    		WHERE Vehicule.IDCATEGO = Categorie.IDCATEGO
    		AND Contrat.IDCONTRAT = Facture.IDCONTRAT
    		AND Contrat.IDVEHICULE = Vehicule.IDVEHICULE
    		AND Facture.IDCONTRAT = "LPD20054328";)
    	 +
    	//Selection Prix des Suppléments
    		(SELECT Sum(Supplement.PRIXSUPPL) as PrxSuppls
    		FROM Contrat,Ajoute,Supplement,Facture
    		WHERE Facture.IDCONTRAT = Contrat.IDCONTRAT
    		AND Contrat.IDCONTRAT = Ajoute.IDCONTRAT
    		AND Ajoute.IDSUPPL = Supplement.IDSUPPL
    		AND Facture.IDCONTRAT = "LPD20054328";)
    	);

  2. #2
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Sous oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      1  SELECT SUM(toto.t)
      2     FROM (
      3               SELECT 1 as t
      4                  FROM dual
      5               UNION
      6               SELECT 2 as t
      7                  FROM dual
      8                UNION
      9              SELECT 3 as t
     10               FROM dual
     11* ) toto

  3. #3
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 118
    Points : 73
    Points
    73
    Par défaut
    J'ai vraiment du mal à integrer ta solution dans mon code actuel...
    Peut etre, pourrai tu m'en dire plus...

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      3               SELECT 1 as t
      4                  FROM dual
    Je dois remplacer dual ou pas ? et où dois-je mettre le nom de mes tables ?

    De plus, le mot clé UNION se met après la première requete ?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Votre requête n'a aucune chance de donner quoi que ce soit :

    1) les chaines de caractères doivent être délimitées par des apostrophe non des guillemets

    2) pas de point virgule dans les sous requêtes : elles font partie de la requête !

    3) les jointures se font dans une clause JOIN

    4) donnez des alias à vos table

    5) préférez corréler vos requêtes afin de minimiser le flux de données

    ENFIN : votre requête est incohérente : il manque 6 jointures ce qui en fait un produit cartésien !!! (voir les ??? dans le code SQL)
    D'ou l'intérêt d'utiliser les jointure normative (INNER/OUTER JOIN...) pour vérifier ce que vous faites !


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    SELECT F.MONTANT
    FROM   Facture F
    WHERE  F.MONTANT =
    //Selection Prix Forfait de base
          (SELECT T.prix
           FROM   Tarification T
                  INNER JOIN Forfait FF  ON T.IDFORFAIT = FF.IDFORFAIT
                  INNER JOIN Contrat C   ON FF.IDFORFAIT = C.IDFORFAIT
                  INNER JOIN Vehicule V  ON C.IDVEHICULE = V.IDVEHICULE
                                            AND T.IDCATEGO = V.IDCATEGO
                  INNER JOIN Facture FC  ON FC.IDCONTRAT = C.IDCONTRAT
          )
        +
    //Selection Prix Kms Supplémentaires
          (SELECT CG.PRIXKMSUP * Fc.KMSUP
           FROM   Tarification T
                  INNER JOIN Forfait FF   ON ???
                  INNER JOIN Contrat C    ON ???
                  INNER JOIN Categorie CG ON ???
                  INNER JOIN Facture FC   ON C.IDCONTRAT = FC.IDCONTRAT
                  INNER JOIN Vehicule V   ON V.IDCATEGO = CG.IDCATEGO
                                             AND C.IDVEHICULE = V.IDVEHICULE
           WHERE  FC.IDCONTRAT = F.IDCONTRAT)
        +
    //Selection Prix Jours Supplémentaires
          (SELECT Categorie.PRIXKMSUP*Facture.KMSUP 
           FROM   Tarification T
                  INNER JOIN Forfait F    ON ???
                  INNER JOIN Contrat C    ON ???
                  INNER JOIN Categorie CG ON ???
                  INNER JOIN Facture FC   ON C.IDCONTRAT = FC.IDCONTRAT
                  INNER JOIN Vehicule V   ON V.IDCATEGO = CG.IDCATEGO
                                             AND C.IDVEHICULE = V.IDVEHICULE
           WHERE  FC.IDCONTRAT = F.IDCONTRAT)
        +
    //Selection Prix des Suppléments
          (SELECT Sum(Supplement.PRIXSUPPL)
           FROM   Contrat C
                  INNER JOIN Ajoute A     ON C.IDCONTRAT = A.IDCONTRAT
                  INNER JOIN Supplement S ON A.IDSUPPL = S.IDSUPPL
                  INNER JOIN Facture FC   ON FC.IDCONTRAT = C.IDCONTRAT
           WHERE  FC.IDCONTRAT = F.IDCONTRAT)
     
    AND F.IDCONTRAT = 'LPD20054328'
    A +

  5. #5
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    L'exemple que je t'ai donné doit bien evidemment être adapté.

    En gros voila ce que cela doit donner:
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    SELECT Facture.MONTANT
    FROM Facture
    WHERE Facture.MONTANT =
       (
          (SELECT sum(value)
              FROM  (
         SELECT Tarification.prix as value
          FROM Tarification,Forfait,Contrat,Vehicule,Facture
          WHERE Tarification.IDFORFAIT = Forfait.IDFORFAIT
          AND Forfait.IDFORFAIT = Contrat.IDFORFAIT
          AND Contrat.IDVEHICULE = Vehicule.IDVEHICULE
          AND Facture.IDCONTRAT = Contrat.IDCONTRAT
          AND Tarification.IDCATEGO = Vehicule.IDCATEGO
          AND Facture.IDCONTRAT = 'LPD20054328'
        UNION
         SELECT Distinct Categorie.PRIXKMSUP*Facture.KMSUP as value
          FROM Tarification,Forfait,Contrat,Categorie,Facture,Vehicule
          WHERE Vehicule.IDCATEGO = Categorie.IDCATEGO
          AND Contrat.IDCONTRAT = Facture.IDCONTRAT
          AND Contrat.IDVEHICULE = Vehicule.IDVEHICULE
          AND Facture.IDCONTRAT = 'LPD20054328'
        UNION
          SELECT Distinct Categorie.PRIXKMSUP*Facture.KMSUP as value
          FROM Tarification,Forfait,Contrat,Categorie,Facture,Vehicule
          WHERE Vehicule.IDCATEGO = Categorie.IDCATEGO
          AND Contrat.IDCONTRAT = Facture.IDCONTRAT
          AND Contrat.IDVEHICULE = Vehicule.IDVEHICULE
          AND Facture.IDCONTRAT = 'LPD20054328')
        UNION
          SELECT Sum(Supplement.PRIXSUPPL) as PrxSuppls
          FROM Contrat,Ajoute,Supplement,Facture
          WHERE Facture.IDCONTRAT = Contrat.IDCONTRAT
          AND Contrat.IDCONTRAT = Ajoute.IDCONTRAT
          AND Ajoute.IDSUPPL = Supplement.IDSUPPL
          AND Facture.IDCONTRAT = 'LPD20054328'
           )
        )
    )

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/01/2009, 16h01
  2. [SQL] Addition de données d'une base de données
    Par minusette dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/06/2007, 11h24
  3. [SQL] Problème d'addition dans requete SQL
    Par cheers94wow dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/05/2006, 15h05
  4. [SQL] Addition sur condition
    Par Hannubis dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/03/2006, 16h05
  5. Requete SQL d'addition
    Par kernel57 dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/02/2006, 17h58

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