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
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!