[SQL] Concours sql pro – Problème n° 39 – abstract et mots clefs (4 étoiles).

Concours : http://sqlpro.developpez.com/Exercices/Index.html
Enoncé : http://sqlpro.developpez.com/Exercices/SQL_AZ_P4.html
Solution : voir ci dessous.
Indice : il s’agit d’un nouveau problème à base de CTE.

WITH T(PPR_TITRE,Motcle,LesAutresMotcles)
AS
(
SELECT PPR_TITRE,  
        CASE  
           WHEN CHARINDEX('#', PPR_ABSTRACT) > 0 THEN LTRIM(SUBSTRING(PPR_ABSTRACT, 1, CHARINDEX('#', PPR_ABSTRACT) - 1))
           ELSE PPR_ABSTRACT
        END AS Motcle,  
       LTRIM(SUBSTRING(PPR_ABSTRACT, CHARINDEX('#', PPR_ABSTRACT) + 1, LEN(PPR_ABSTRACT) - CHARINDEX('#', PPR_ABSTRACT))) AS LesAutresMotcles
 
FROM   T_PAPIER_PPR
UNION ALL
SELECT RP.PPR_TITRE,
        CASE  
           WHEN CHARINDEX('#', LesAutresMotcles) > 0 THEN LTRIM(SUBSTRING(LesAutresMotcles, 1, CHARINDEX('#', LesAutresMotcles) - 1))
           ELSE LesAutresMotcles
        END,  
        CASE  
           WHEN CHARINDEX('#', LesAutresMotcles) > 0 THEN LTRIM(SUBSTRING(LesAutresMotcles, CHARINDEX('#', LesAutresMotcles) + 1, LEN(LesAutresMotcles) - CHARINDEX('#', LesAutresMotcles)))
           ELSE NULL
        END
FROM   T_PAPIER_PPR RP
       INNER JOIN T
             ON T.PPR_TITRE = RP.PPR_TITRE
WHERE LesAutresMotcles IS NOT NULL
)
SELECT Motcle, count(Motcle)
FROM   T
GROUP BY Motcle

Le week end dernier, je cherchais une solution avec les CTE pour résoudre ce problème sans y arriver et cette semaine, sql pro a poste sur le forum developpez.com, une solution à un problème similaire… Merci SQL Pro!

Laisser un commentaire