Bonjour à tous,

Je viens solliciter votre expertise sur SQL server.
Allons tout de suite à mon problème de débutant, ma_table principale :

record_id chain_id chain_n result
1 A 0 occupé
2 A 1 répondu
3 A 2 Répondeur
4 B 0 Personne
5 B 1 Libre
6 B 2 Sonné
......
......

Pour une chain_id donnée, il y a 3 chain_n.
Voici ma requête pour récupérer les enregistrements si un des 3 chain_n d'un chain_id donné, contient un résultat que j'aimerais avoir.
Par exemple, si je veux savoir s'il y a des chain_id dont 1 des 3 chain_n contient le reésult = 'occupé', je fais la requête ci-dessous :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT record_id,chain_id,chain_n,result
FROM ma_table Rm
 
    where chain_id in (select chain_id from ma_table sR                            
 
                            where call_result = 'occupé' and 
                              not exists (select * from ma_table Rx                                           
 
                                            where sR.chain_id = Rx.chain_id and Rx.result in ('parlé','chanté')
 
                                         )  
 
                      )
       group by record_id,chain_id,chain_n,result
  		 ;
Le résultat retourne des record_id 1,2,3

Jusque là tout va bien. J'aimerais maintenant prioriser sur result, avec ma requête précédente,
si je veux avoir le résultat = 'occupé' mais si 1 des 2 autres chain_n contient le result qui est plus priorisé que 'occupé', ici en l'occurence 'Répondeur'
ma requête ne devrait pas retourner les record_id 1,2,3


TABLE_REF :

RESULT VAL_PRIO
Libre 4
occupé 2
Personne 3
Répondeur 1
répondu 5
Sonné 6

Et là, je ne sais pas comment m'y prendre
J'espère d'être compréhensible.