Bonjour à toutes et à tous.
La requête qu'avait proposé @aieeeuuuuu donnait le résultat espéré. J'ai juste rajouté un ordre de classement après les jointures internes. Donc voici à nouveau cette requête :
J'avais mal décrit le problème à traiter, en ce sens qu'il peut y avoir des messages qui n'ont pas suscité de réponses et qu'il faut faire apparaître dans la liste avec bien évidemment un 0 dans la colonne NbReponse. Comme je ne comprends pas la requête précédente, je ne m'en sort pas tout seul!
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
16
17
18
19
20
21
22 WITH CTE AS ( SELECT S.suj_titre AS Titre, COUNT(*) OVER (PARTITION BY S.suj_id) AS NbReponses, Auteur.uti_nom AS Auteur, ROW_NUMBER() OVER( PARTITION BY S.suj_id ORDER BY R.rep_date DESC, R.rep_heure DESC ) AS RangReponse, U.uti_Nom AS NomRepondeur FROM t_e_sujets_suj S INNER JOIN t_e_utilisateurs_uti Auteur ON Auteur.uti_id = S.uti_id INNER JOIN t_e_reponses_rep R ON R.suj_id = S.suj_id INNER JOIN t_e_utilisateurs_uti U ON U.uti_id = R.uti_id ORDER BY S.suj_date DESC ) SELECT Titre, NbReponses, Auteur, NomRepondeur FROM CTE WHERE RangReponse = 1;
J'ai bien changé, à l'aveuglette, les deux dernières jointures en LEFT OUTER JOIN, ce qui fait apparaître le message sans réponse mais avec un nombre de réponse égal à 1 et non 0.
En attendant une réponse à mon problème, je potasse les PARTITION BY, retravaille les jointures que je croyais avoir comprises et d'autres points importants du SQL.
Merci d'avance pour vos réponses.
Miflon
Partager