vrijdag 11 januari 2019

hierarchische functies Oracle sys_connect_by_path

Stel je hebt een tabel en je wilt alle mogelijke waarden van een bepaald veld bijv voorzieningsoort achter elkaar plakken

SELECT piv.*
,      ROW_NUMBER () OVER (ORDER BY VOORZIENINGSOORT ) AS rn
,      COUNT (*) OVER () AS cnt
FROM (
        SELECT DISTINCT VOORZIENINGSOORT
        FROM SPEEL_PIVOT
    ) piv ;


heeft als resultaat



zoals je ziet is er een ordening en totaal als regel teogevoegd.

Nu kan je met de hierarchische functie SYS_CONNECT_BY_PATH alle voorzieningsoort waarden achter elkaar plakken met een scheidingsteken

SELECT SYS_CONNECT_BY_PATH (VOORZIENINGSOORT,'/') FROM
                    (SELECT piv.*
                    ,      ROW_NUMBER () OVER (ORDER BY VOORZIENINGSOORT ) AS rn
                    ,      COUNT (*) OVER () AS cnt
                    FROM (
                        SELECT DISTINCT VOORZIENINGSOORT
                        FROM SPEEL_PIVOT
                    ) piv)
WHERE 1=1 --rn = cnt
START WITH ROWNUM  = 1
 CONNECT BY rn = PRIOR rn + 1


levert


Wij zijn alleen geinteresseerd in de laatste regel. Dus rn=cnt

en willen een andere opmaak

SELECT SUBSTR (SYS_CONNECT_BY_PATH (VOORZIENINGSOORT, ''','''), 3) || ''''
                                                FROM (SELECT piv.*
                                                ,      ROW_NUMBER () OVER (ORDER BY VOORZIENINGSOORT ) AS rn
                                                ,      COUNT (*) OVER () AS cnt
                                                FROM (
                                                        SELECT DISTINCT VOORZIENINGSOORT
                                                        FROM SPEEL_PIVOT
                                                    ) piv)
                                                WHERE rn = cnt
                                                START WITH ROWNUM  = 1
                                                CONNECT BY rn = PRIOR rn + 1

hiermee omsluiten we alle voorzieningsoorten met een quote en gescheiden door een komma

Jeugd - Ambulante jeugdzorg','Jeugd - Begeleiding individueel en groep','Jeugd - Behandeling (L)VB','Jeugd - Dagbehandeling jeugdzorg','Jeugd - Generalistische basis GGZ....




Geen opmerkingen:

Een reactie posten