Mehrere Zeilen zu einer Zeile zusammenfassen - per SQL (ohne 11g LISTAGG)

Immerwieder gebraucht: Mehrere Zeilen einer Abfrage zu einer Liste zusammenzufassen.

Eine Lösung per SQL:

select fall, MAX(LTRIM(sys_connect_by_path(TXT,', '),', ')) liste from ( 
select fall
, row_number() over (partition by fall order by fall) zeile
, nr, txt from
(
select 1 fall, 11 Nr, 'Txt 1A' Txt from dual
union all
select 1 fall, 12, 'Txt 1B' from dual
union all
select 1 fall, 13, 'Txt 1C' from dual
union all
select 1 fall, 14, 'Txt 1D' from dual
union all
select 2 fall, 15, 'Txt 2A' from dual
union all
select 2 fall, 16, 'Txt 2B' from dual
union all
select 2 fall, 17, 'Txt 2C' from dual
union all
select 2 fall, 18, 'Txt 2D' from dual
)
)
start with zeile = 1
connect by fall = PRIOR fall and prior zeile = zeile -1
group by fall
;

Liefert als Ergebnis:
Fall Liste
1    Txt 1A, Txt 1B, Txt 1C, Txt 1D
2    Txt 2A, Txt 2B, Txt 2C, Txt 2D

Aufbau des Statements:

select 1 fall, 11 Nr, 'Txt 1A' Txt from dual
union all
select 1 fall, 12, 'Txt 1B' from dual
union all
select 1 fall, 13, 'Txt 1C' from dual
union all
select 1 fall, 14, 'Txt 1D' from dual
union all
select 2 fall, 15, 'Txt 2A' from dual
union all
select 2 fall, 16, 'Txt 2B' from dual
union all
select 2 fall, 17, 'Txt 2C' from dual
union all
select 2 fall, 18, 'Txt 2D' from dual

simuliert eine Tabelle mit 8 Zeilen

Kommentare

  1. Wunderbar !!!
    Ich habe es mir zusammengesetzt. Bislang wurde eine Function hierfür genutzt, was das Schreiben (Übergeben) eines SQL-Statements allerdings sehr schwierig macht.
    Ich möchte ja stets einen Datenzusammenschluss innerhalb einer Hauptquery wie z. B.:
    Zeige den Namen der Person mit der ID = 1 und deren mehrere Eigenschaften an.
    D. h., ich muss immer mit einem Subselect arbeiten.
    Innerhalb des Subselects kann ich auf die Person_ID der Hauptabfrage Bezug nehmen.

    Select Person.Person_ID,
    Name,
    ( zeilen zu Spalte, z. B. mehrere Eigenschaften dieser Person unter Bezug auf die Person_ID Hauptquery )
    from Person
    where Person_ID = 1 -- (die ID 1 benötige ich für Zeilen_zu_Spalte)
    ----------

    Die reine SQL-Variante ist hier leider (offenbar) nicht möglich, wenn ich z. B. von Person-ID 1 die Wochentage seiner nächsten Termine wissen möchte:

    Select Person_ID,
    Name, -- nachfolgend aus Termine
    -- seine Wochentage
    (select Fall, -- 1. Subselect
    MAX(LTRIM(sys_connect_by_path
    (TXT,', '),', ')) liste from
    (select fall, row_number() over....
    from -- 2. Subselect
    (Select 1 fall, -- 3. Subselect
    Person_Termine .. usw.
    from Person_Termine
    where Person_Termine.Person_ID =
    -- (Hauptabfrage)
    Person.Person_ID
    )
    )
    from Personen ... usw.
    -----------------------------

    Möchte ich mehrere Zeilen zu einer Person in eine Spalte packen, so kann ich mich offenbar mit der SQL-Variante nicht auf die ID der Hauptabfrage beziehen, da die Subselects in sich verschachtelt sind.

    ORA-00904: "PERSON"."PERSON_ID": ungültiger Bezeichner

    Trotzdem ist alles Topp hier!
    Diese Seite hebe ich mir auf.
    Vielen Dank für die Mühe.

    Michael Marschall

    AntwortenLöschen
  2. Wow, incredible blog layout! How long have you been blogging for?
    you made blogging look easy. The overall look of your web site is magnificent,
    as well as the content!

    my webpage: buy flat

    AntwortenLöschen
  3. Wonderful goods from you, man. I have understand your stuff previous to and you are just too wonderful.
    I really like what you've acquired here, certainly like what you're
    stating and the way in which you say it. You make it enjoyable
    and you still take care of to keep it sensible. I can't wait to read much more from you. This is actually a great site.

    My web blog ... www.propertywide.co.uk

    AntwortenLöschen
  4. Fine way of telling, and good piece of writing to obtain information about my presentation topic, which i am going to deliver in school.


    Check out my webpage - http://www.propertywide.co.uk

    AntwortenLöschen
  5. This paragraph will help the internet viewers for creating new blog
    or even a weblog from start to end.

    Check out my web blog breaking news

    AntwortenLöschen

Kommentar veröffentlichen

Beliebte Posts aus diesem Blog

PGA unter Oracle 11g

trunc(sysdate) - nette Spiele mit dem Datum

Datapump - Verzeichnis erstellen