Announcement

Collapse
No announcement yet.

Mehrere Zeilenwerte zusammenfassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mehrere Zeilenwerte zusammenfassen

    Hallo zusammen,

    geht soetwas auch in Firebird?

    Code:
    select key,col1||col2||col3 colconcat 
    from (select key 
    ,max(decode(col1,1,col1)) col1 
    ,max(decode(col1,2,col1)) col2 
    ,max(decode(col1,3,col1)) col3 
    from fk1 join fk2 using(key) group by key);
    Ich bin auf der Suche nach einer Lösung für folgendes Problem:

    Code:
    Datenbankstruktur:
    
    TABELLE1
    MASTERINDEX	KUNDE
    1		TEST1
    2		TEST2
    3		TEST3
    		
    
    TABELLE2
    MASTERINDEX	TABELLE1.MASTERINDEX	ORT
    1		1			HAMBURG
    2		1			BERLIN
    3		2			STUTTGART
    4		2			BREMEN
    5		3			BOCHUM
    
    
    Gewünschte Ausgabe:
    
    MASTERINDEX	KUNDE	ORTE
    1		TEST1	HAMBURG, BERLIN
    2		TEST2	STUTTGART, BREMEN
    3		TEST3	BOCHUM

    Gruß Heiner
    Gruß Heiner
    ____________________________________
    Firebird 2.0

  • #2
    Hallo Heiner,

    kommt auf die Firebird Version drauf an.

    Mit Firebird < 2.1 mit einer Selectable Stored Procedure, z.B.:

    [ highlight=sql ]
    SET TERM ^^ ;
    CREATE PROCEDURE S_KUNDE_ORTE returns (
    MASTERINDEX Integer,
    KUNDE VarChar(40),
    ORTE VarChar(32000))
    AS
    declare variable vOrt Varchar(40);
    begin
    for select masterindex, kunde from tabelle1 into :masterindex, :kunde do
    begin
    vOrt = '';
    orte = '';
    for select ort from tabelle2 where tabelle1_masterindex = :masterindex into vOrt do
    begin
    if (orte = '') then
    begin
    orte = vOrt;
    end else
    begin
    orte = orte || ', ' || vOrt;
    end
    end
    suspend;
    end
    end
    ^^
    SET TERM ; ^^
    [ /highlight ]

    Verwendung wie eine Tabelle:

    [ highlight=sql ]
    select * from S_KUNDE_ORTE;
    [ /highlight ]

    Mit Firebird 2.1 geht das dank der neuen <b>LIST(...)</b> Funktion einfacher. z.B.:

    [ highlight=sql ]
    select
    t1.masterindex
    , t1.kunde
    , (select list(ort, ', ') from tabelle2 t2 where t1.masterindex = t2.tabelle1_masterindex) as orte
    from
    tabelle1 t1
    [ /highlight ]

    Hoffe das hilft dir weiter.

    lg,
    Thomas
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Hallo Thomas,

      vielen Dank für den Code. Leider habe ich momentan eine Firebird 2.0.3 Server laufen und daher ist die List-Funktion noch nicht möglich.

      Sobald ich aber den 2.1er Server laufen habe, werde ich die Geschichte testen.

      Danke schonmal.
      Gruß Heiner
      ____________________________________
      Firebird 2.0

      Comment


      • #4
        Hallo Heiner,

        dann nimm die Stored Procedure Variante, die auch unter < 2.1 läuft.


        Thomas
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment


        • #5
          Hallo Thomas,

          die Selectable Stored Procedure habe ich soweit am Laufen. Danke für den Tip.

          Wenn ich das Ergebnis nun aber mit einem View anzeigen lassen möchte (ich benötige das Ergebnis der Stored Procedure als verknüpfte Tabelle in Access - daher der View), erhalte ich beim Committen des Views die Fehlermeldung:

          Unsuccessful execution caused by a system error that precludes
          successful execution of subsequent statements.
          Dynamic SQL Error.
          feature is not supported.


          Ist das so überhaupt möglich?
          Gruß Heiner
          ____________________________________
          Firebird 2.0

          Comment


          • #6
            Hallo,

            man kann in Firebird leider keine View basierend auf einer SP erstellen. Kannst Du nicht direkt das SELECT * FROM MEINERSP in Access ausführen?


            lg,
            Thomas
            Thomas Steinmaurer

            Firebird Foundation Committee Member
            Upscene Productions - Database Tools for Developers
            Mein Blog

            Comment

            Working...
            X