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 :

Ajout d'une précision dans une requête existante


Sujet :

Langage SQL

  1. #1
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut Ajout d'une précision dans une requête existante
    Bonjour,

    j'ai une requête du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT A, B, C
    FROM (SELECT A, B, C
      FROM T1, (SELECT A, B, C
         FROM T2
         WHERE C1
      UNION ALL
        SELECT A, B, C
         FROM T2
         WHERE C2
      )
    )...
    J'ai ajouté une condition C3 après C1 et C2 pour n’obtenir qu'une partie des résultats et une donnée supplémentaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT A, B, C, D
    FROM (SELECT A, B, C, D
      FROM T1, (SELECT A, B, C, D
         FROM T2, T3
         WHERE C1 AND C3
      UNION ALL
        SELECT A, B, C, D
         FROM T2, T3
         WHERE C2 AND C3
      )
    )...
    Mon problème est qu'il me faut toutes les lignes de la première requête avec la donnée D quand C3 est respectée ou null sinon et cela sans doublon sur "A B C". Je n'arrive pas à combiner les deux.
    Christophe

    Pensez à mettre quand c'est le cas.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Quelque chose dans ce goût là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT A, B, C, CASE WHEN C3 THEN D END as D
      FROM T2
     WHERE C1 AND C3
     UNION ALL
    SELECT A, B, C, CASE WHEN C3 THEN D END as D
      FROM T2
     WHERE C2 AND C3

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    C3 est est assez complexe et fait intervenir au moins une autre table (je modifie le message initial pour le préciser). Je vais quand même essayer, merci.
    Christophe

    Pensez à mettre quand c'est le cas.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    J'ai lancé les deux requêtes et fait l'union avec du PHP. Cependant si quelqu'un a une idée ça m'intéresse.
    Christophe

    Pensez à mettre quand c'est le cas.

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par Christophe P. Voir le message
    C3 est est assez complexe et fait intervenir au moins une autre table
    Alors il serait utile de poster le code afin que l'on puisse mieux vous aider.

    Si c'est pour garder une bonne lisibilité et éviter de dupliquer du code, vous pouvez peut-être passer par une expression de table commune.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 303
    Points : 1 380
    Points
    1 380
    Par défaut
    Voici un exemple de C3 (il y en a d'autres).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    AND T3.noip = T2.noip
    AND T3.daexec = T2.daexec
    AND T3.NODA <> 'E000000000'
    AND NOT EXISTS (SELECT 1
                     FROM T5
                     WHERE T5.noip = T2.noip
    			AND T2.daexec BETWEEN T5.daentr - 1 AND NVL(T5.dasor, TO_DATE('01/01/3000', 'DD/MM/YYYY')) + 1
    			AND T5.TYT5 = 'A'
    			AND T5.CDETDO <> 'D')
    AND T4.NODA = T3.NODA
    AND T4.DAEXEC = T2.DAEXEC
    Précision que j'ai oubliée, il s'agit d'une base Oracle 8.
    Christophe

    Pensez à mettre quand c'est le cas.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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