Oracle SQL Decode

Fermé
UlrichVonDenGluckBach Messages postés 12 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 15 février 2011 - 29 avril 2009 à 09:21
UlrichVonDenGluckBach Messages postés 12 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 15 février 2011 - 29 avril 2009 à 10:30
Bonjour, très chers membres.

Me voila devant vous pour vous demander de l'aide, je suis actuellement en train de faire mon travail de diplôme et je bloque intense soit peut sur une requête SQL.

Je vous ai mis un print screen de mes tables ainsi que ma requête plus bas.

Explications :
Je suis a présent en train de faire une requête me rapportant certaine information lié a la garantie.

Une garantie peut être >assuré< soit par une entreprise ou une banque.
Pour Savoir si c'est une banque ou une entreprise qui assure ma garantie je place un flag, garantie.gar_emetteur_type, qui si il vaut "A" est une entreprise ou si "B" une banque.

Problème
Si je place mes tables : Banque et Entreprise et que j'exécute ma requête,ci-dessous, elle ne m'affiche rien. Alors que si je ne met que banque elle m'affiche les garanties avec les banque comme assurance , et vice versa.

Solution :
Faire que lorsque le garnatie.gar_emetteur_type vaut a j'ai l'ID de l'entreprise et lorsqu'il vaut b l'ID de la banque. Tout ceci avec toutes les tables.

J'ai pensé a un Decode, mais je ne mis connais que trop peu, si qqun peut m'aider, merci.

Print de mes tables
[url=http://www.noelshack.com/][img]http://www.noelshack.com/voir/130309/TPI_PS_Oracle_Table071486.png[/img][/url]

- Requête SQL sous oracle
/* Formatted on 2009/04/29 08:50 (Formatter Plus v4.8.5) */
SELECT garantie.gar_num, garantie.gar_statut, garantie.gar_date_emission,
garantie_date.gar_date_echeance, garantie_date.gar_date_verification,
garantie_date.gar_date_statut, garantie.gar_montant,
garantie.gar_emetteur_type, garantie.ban_id, garantie.ent_id
FROM garantie, garantie_date, contrat_cmd, lot_mf, banque, entreprise
WHERE ( (garantie.gar_id = garantie_date.gar_id)
AND (contrat_cmd.ctr_id = garantie.ctr_cmd)
AND (lot_mf.lot_mf_id = garantie.lot_mf_id)
AND (banque.ban_id = garantie.ban_id)
AND (entreprise.ent_id = garantie.ent_id)
AND (garantie.ctr_cmd = 213)
)
GROUP BY garantie.ctr_cmd,
garantie.gar_num,
garantie.gar_statut,
garantie.gar_date_emission,
garantie_date.gar_date_echeance,
garantie_date.gar_date_verification,
garantie_date.gar_date_statut,
garantie.gar_montant,
contrat_cmd.ctr_numero,
lot_mf.lot_mf_numero,
garantie.gar_emetteur_type,
garantie.ban_id,
garantie.ent_id



P.S. excusez moi, j'ai un peu de mal pour m'expliquer.

1 réponse

UlrichVonDenGluckBach Messages postés 12 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 15 février 2011
29 avril 2009 à 10:30
Voila ça peu tjs aider
Au plaisir


/* Formatted on 2009/04/29 09:36 (Formatter Plus v4.8.5) */
SELECT garantie.gar_num, garantie.gar_statut, garantie.gar_date_emission,
garantie_date.gar_date_echeance, garantie_date.gar_date_verification,
garantie_date.gar_date_statut, garantie.gar_montant,
DECODE(garantie.gar_emetteur_type,'B',banque.BAN_ID,entreprise.ENT_ID)Assurance_Id,
garantie.GAR_EMETTEUR_TYPE

FROM garantie, garantie_date, contrat_cmd, lot_mf, banque,entreprise
WHERE ( (garantie.gar_id = garantie_date.gar_id)
AND (contrat_cmd.ctr_id = garantie.ctr_cmd)
AND (lot_mf.lot_mf_id = garantie.lot_mf_id)
AND (banque.ban_id(+) = garantie.ban_id)
AND (entreprise.ent_id(+) = garantie.ENT_ID)
AND (garantie.ctr_cmd = 213)
)
GROUP BY garantie.ctr_cmd,
garantie.gar_num,
garantie.gar_statut,
garantie.gar_date_emission,
garantie_date.gar_date_echeance,
garantie_date.gar_date_verification,
garantie_date.gar_date_statut,
garantie.gar_montant,
contrat_cmd.ctr_numero,
lot_mf.lot_mf_numero,
garantie.gar_emetteur_type,
garantie.ban_id,
garantie.ent_id,
banque.ban_id,
entreprise.ent_id
0