Clause Case dans un Select

cs_zigguy Messages postés 2 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 23 juillet 2012 - 23 juil. 2012 à 22:12
cs_zigguy Messages postés 2 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 23 juillet 2012 - 23 juil. 2012 à 22:45
Bonjour,

Je n'arrive pas à créer une requête qui devrait retourner soit 1 ou soit 4 enregistrements.

J'ai 3 tables (Tâches, Affectation, et Personnes). La table Affectation est une table d'intersection entre les 2 autres. Cependant la table Tâches contient un ID_Responsable correspondant a un enregistrement de la table Personnes pour indiquer le RESPONSABLE de l'unité de tâche. Pour sa part, la table Affectation contient les ID des personnes affectées à la RÉALISATION d'une tâche ainsi que les ID des tâches à effectuer.

Si pour l'Affectation courante la personne affectée à la réalisation de la tâche est aussi celui qui en est responsable alors la requête devrait retourner 4 lignes provenant d'une autre table.

Ex: SELECT CO_TYP_ETAP || ' - ' || NM_TYP_ETAP FROM HPA04T04_TYP_ETAP
WHERE IND_AFICH_ETAP = 'O'

Sinon si pour l'Affectation courante la personne affectée à la réalisation de la tâche est DIFFÉRENTE de celui qui en est responsable alors la requête devrait retourner 1 seule ligne provenant d'une autre table.

Ex: SELECT CO_TYP_ETAP || ' - ' || NM_TYP_ETAP FROM HPA04T04_TYP_ETAP
WHERE CO_TYP_ETAP = '1'

Pour résumer:
Une personne peut être affectée à une ou plusieurs tâches.
Une tâche n'est affectée qu'à une seule personne (En fait elle peut-être affectée plusieurs fois à la même perseonne ou à d'autres mais une date de fin de réalisation fait en sorte qu'elle ne peut faire l'objet d'une affectation à la fois
--> AND AFFECTATION.DA_FIN_AFECT IS NULL
Une tâche est sous la responsabilité d'une personne qui peut ou non être celle qui doit la réaliser.

J'utilise un alias pour la table Tâches afin de pouvoir comparer le ID de la personne responsable avec celui de la personne affectée à sa réalisation et l'instruction Case mais j'ai toujours une erreur de type ORA01427: Sous-interrogation ramenant un enregistrement de plus d'une ligne.

Tâches Personnel Responsable
1451 4 4 devrait retourner 4 lignes
1453 76 88 devrait retourner 1 lignes
1313 83 83 devrait retourner 4 lignes
1324 92 69 devrait retourner 1 lignes

J'espère que le tout est assez clair. Merci de votre support.

1 réponse

cs_zigguy Messages postés 2 Date d'inscription jeudi 10 juillet 2008 Statut Membre Dernière intervention 23 juillet 2012
23 juil. 2012 à 22:45
Mon erreur vient du premier élément du Case, le Select retourne plus d'une ligne.
Cependant quand = Principal, je voudrais avoir 4 lignes venant du Select suivant:
SELECT CO_TYP_ETAP || ' - ' || NM_TYP_ETAP FROM HPA04T04_TYP_ETAP
WHERE IND_AFICH_ETAP = 'O'

Et quand = Enqueteur, je voudrais qu'elle retourne 1 seule ligne.
SELECT CO_TYP_ETAP || ' - ' || NM_TYP_ETAP FROM HPA04T04_TYP_ETAP
WHERE CO_TYP_ETAP = '1'

Voici le Select que j'essaie de corriger.

SELECT (CASE AFFECTATION.ID_HPA04T01
WHEN TACHES.ID_HPA04T01_PRINCIPAL THEN

'PRINCIPAL'

ELSE

'ENQUETEUR'
END) ETAPE
/*AF.ID_HPA04T01*/
/*UE.ID_HPA04T01_VALD*/
FROM hpa04t03_TACHES,
hpa04t03_TACHES RESPONSABLE,
HPA04T01_PERSN PERSONNE,
Hpa04t02_AFECTATION AFFECTATION

WHERE TACHES.ID_HPA04T03 = AFFECTATION.ID_HPA04T03
AND AFFECTATION.ID_HPA04T01 = PERSONNE.ID_HPA04T01
AND TACHES.ID_HPA04T03 = RESPONSABLE.ID_HPA04T03
AND AFFECTATION.ID_HPA04T02 = 7017
AND AFFECTATION.DA_DEBT_AFECT IS NOT NULL
AND AFFECTATION.DA_FIN_AFECT IS NULL
AND AFFECTATION.CO_TYP_AFECT = 1

/*
UE Enquêteur Principal ID_Afect
1451 4 4 7017
1453 76 88 9073
1313 83 83 4974
1324 92 69 7590
*/
0
Rejoignez-nous