1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| WITH
ListePaysCopro (oeu_id, Payscopro ) AS
(SELECT oeu_id,
, cast(opa_ordre AS varchar(1)) + pay_libelle + ' ' + cast((cast(opa_pourcentage AS float))/100 AS varchar(6))) AS Payscopro
FROM [OEUVRE_PAYS]
inner join [PAYS] on [OEUVRE_PAYS].pay_id=[PAYS].pay_id
)
,CTE (oeu_id, pays_list, liste_payscopro, LENGTH) AS
(SELECT oeu_id,
cast(' ' AS varchar(8000)) AS pays_list,
cast(' ' AS varchar(8000)) AS liste_payscopro,
0 AS LENGTH
FROM
ListePaysCopro
GROUP BY oeu_id
UNION ALL
SELECT lcp.oeu_id, --oeu_id
CAST (pays_list
+ CASE
WHEN LENGTH=0 THEN ''
ELSE ', '
END
+ Payscopro
AS varchar(8000)), -- pays_list
cast(Payscopro AS varchar(8000)), -- liste_payscopro
LENGTH +1 -- LENGTH
FROM CTE
INNER JOIN ListePaysCopro lcp ON CTE.oeu_id = lcp.oeu_id
WHERE lcp.Payscopro > CTE.liste_payscopro
)
,D (oeu_id, pays_list, rank) AS
(SELECT oeu_id,
pays_list,
rank() OVER (PARTITION BY oeu_id
ORDER BY LENGTH DESC)
FROM CTE)
--INSERT INTO OEUVRE_Lst_PAYS_COPRO
SELECT oeu_id,
pays_list
FROM
D
WHERE rank=1; |
Partager