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

SQL Oracle Discussion :

Deux requêtes SQL en une


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Points : 75
    Points
    75
    Par défaut Deux requêtes SQL en une
    Bonjour,

    Mon but est de construire un rapport en pdf en faisant une extraction de données d'une base. Pour cela je dois utiliser iReport (JasperReports).

    Pour des contraintes liées à iReport (pour ceux qui connaissent) je suis obligé de tout faire en un seul ordre SQL.

    Pour des contraintes liées à mon projet, mon rapport doit pouvoir exécuter une requête ou une autre selon un booléen (pour simplifier), mais toujours en un seul ordre SQL.

    Je me retrouve donc dans l'obligation de trouver un moyen SQL (et non PL/SQL) de faire un test et de faire un select en fonction de ce test.

    Petite précision de taille, les deux requêtes ne sont pas du tout sur les mêmes tables...


    Idéalement je cherche un moyen SQL de faire ceci :
    if(test réussi) then requete1 else requete2

    Je vous remercie grandement.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Est-ce que les requêtes couvrent à peu près les mêmes colonnes ?

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Attention il faut que tu rendes compatible les types sur tes colonnes meme si ce ne sont pas les meme tables (quite à mettre des null dans certaines colonnes). Et alors, tu peux faire un truc du style


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select  A.MACHIN C1, A.BIDULE C2 
    from A where :variable = 'TEST1'
    union all 
    select  B.TRUC , B.CHOSE
    from B where :variable = 'TEST2'

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Points : 75
    Points
    75
    Par défaut
    Merci !!!
    Supposons que je renomme toutes les colonnes de chaque requête pour que les deux requêtes soient cohérentes.

    J'ai des group by et des order by je fais comment ?

    Quelque chose de ce genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select *
    from (
         SELECT  A.MACHIN C1, A.BIDULE C2 
         FROM A WHERE :variable = 'TEST1'
      UNION ALL 
         SELECT  B.TRUC , B.CHOSE
         FROM B WHERE :variable = 'TEST2'
    )
    group by <x>
    order by <y>
    A ce moment là, <x> et <y> sont récupérés des sous requêtes ?

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    ben oui ça marche comme n'importe quelle autre requete. L'astuce de faire une égalité entre une variable et une constante fait que tu vas avoir, selon la valeur de ta variable, des blocs de ton union all qui vont avoir un test constant négatif donc qui ne renverront rien et pour pas cher

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lionrouge Voir le message
    Merci !!!
    Supposons que je renomme toutes les colonnes de chaque requête pour que les deux requêtes soient cohérentes.
    J'ai des group by et des order by je fais comment ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT *
    FROM (
         SELECT  A.MACHIN C1, A.BIDULE C2 
         FROM A WHERE :variable = 'TEST1'
      UNION ALL 
         SELECT  B.TRUC C1, B.CHOSE C2
         FROM B WHERE :variable = 'TEST2'
    )
    GROUP BY C1, C2
    ORDER BY C1, C2

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Points : 75
    Points
    75
    Par défaut
    D'accord j'ai compris.
    Je vous remercie.

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

Discussions similaires

  1. Requête sql dans une clause Where
    Par PrinceMaster77 dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/07/2006, 11h30
  2. [SQL] Problème requête sql,rajouter une valeur,checbox
    Par snakejl dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/06/2006, 11h18
  3. [D5][BDE][Multibase] Récupérer les requêtes SQL d'une TTable
    Par Escandil dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/01/2006, 14h29
  4. [requète sql] Créer une vue ordonnée
    Par gangsoleil dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/01/2006, 18h34
  5. Requête SQL avec une réponse unique
    Par Glutinus dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 16h35

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