WITH daten AS (
    SELECT 
        id,
        strassenname,
        hausnummer,
        nachname,
        vorname,
        geburtsname,
        geburtsdatum,
        geburtsort,
        deportationsdatum,
        deportationsziel,
        schicksal_status,
        todesdatum,
        quell_kategorie,
        gedenk_status,
        anmerkungen,
        COALESCE(CAST(regexp_replace(hausnummer, '\D', '', 'g') AS INTEGER), 0) AS hausnr_num,
        regexp_replace(hausnummer, '^[0-9]+', '') AS hausnr_suf,
        ROW_NUMBER() OVER (
            PARTITION BY strassenname 
            ORDER BY 
                COALESCE(CAST(regexp_replace(hausnummer, '\D', '', 'g') AS INTEGER), 0),
                regexp_replace(hausnummer, '^[0-9]+', ''),
                nachname,
                vorname
        ) AS rn_strasse,
        ROW_NUMBER() OVER (
            PARTITION BY strassenname, hausnummer 
            ORDER BY nachname, vorname
        ) AS rn_hausnummer
    FROM public.friedenau_stolpersteine_kompakt
)
SELECT 
    CASE WHEN rn_strasse = 1 THEN strassenname ELSE '' END AS strasse,
    CASE WHEN rn_hausnummer = 1 THEN hausnummer ELSE '' END AS hausnummer,
    nachname,
    vorname,
    geburtsname,	
    geburtsdatum,
    geburtsort,
    deportationsdatum,
    deportationsziel,
    schicksal_status,
    gedenk_status,
    anmerkungen,
    id
FROM daten
ORDER BY 
    strassenname,
    hausnr_num,
    hausnr_suf,
    nachname,
    vorname;