Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2010, 16h39   #1
Nouveau Membre du Club
 
Inscription : novembre 2005
Messages : 98
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 98
Points : 39
Points : 39
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.
lionrouge est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 17/11/2010, 17h08   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 680
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 680
Points : 10 479
Points : 10 479
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Est-ce que les requêtes couvrent à peu près les mêmes colonnes ?
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 17h38   #3
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
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 :
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'
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 18h37   #4
Nouveau Membre du Club
 
Inscription : novembre 2005
Messages : 98
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 98
Points : 39
Points : 39
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 :
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 ?
lionrouge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 18h49   #5
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175
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
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2010, 19h22   #6
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 513
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 513
Points : 3 953
Points : 3 953
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 :
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
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2010, 08h51   #7
Nouveau Membre du Club
 
Inscription : novembre 2005
Messages : 98
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 98
Points : 39
Points : 39
D'accord j'ai compris.
Je vous remercie.
lionrouge est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h52.


 
 
 
 
Partenaires

Hébergement Web