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 45 46
| WITH tmp_recurs
( macolonne
, separe
, mavaleur
, reste
)
AS ( SELECT macolonne
, POSITION(';' IN macolonne) AS separe
, macolonne AS mavaleur
, '' AS reste
FROM matable
WHERE separe = 0
UNION ALL
SELECT macolonne
, POSITION(';' IN macolonne) AS separe
, SUBSTRING(macolonne FROM 1 FOR separe - 1) AS mavaleur
, SUBSTRING(macolonne FROM separe + 1) AS reste
FROM matable
WHERE separe > 0
UNION ALL
SELECT macolonne
, POSITION(';' IN reste) AS separe2
, SUBSTRING(reste FROM 1 FOR separe2 - 1) AS mavaleur
, SUBSTRING(reste FROM separe2 + 1) AS reste2
FROM tmp_recurs
WHERE separe2 > 0
AND reste > ''
UNION ALL
SELECT macolonne
, POSITION(';' IN reste) AS separe2
, reste AS mavaleur
, '' AS reste2
FROM tmp_recurs
WHERE separe2 = 0
AND reste > ''
)
SELECT macolonne
, mavaleur
FROM tmp_recurs AS res
WHERE EXISTS
( SELECT 0
FROM tmp_recurs AS tmp
WHERE res.macolonne = tmp.macolonne
HAVING res.mavaleur = MAX(tmp.mavaleur)
)
; |
Partager