2016-05-28 11 views
1

Ich versuche, alle die Mietobjekten zur Liste ein Manager aus diesem Schema verwaltet:Gruppierung Ergebnis in einer Liste

Create Table Rental_Property(property_number int Primary Key, managerId 
int, Foreign Key(managerId) References manage(managerId)); 

Hier mein Verfahren:

Create Or Replace Procedure supervisor_properties 
As 
     list_of_properties varchar (300) := ' '; 
Begin 
     Select 'Manager' || ': ' || managerId || ' ' || property_number 
     Into list_of_properties 
     From Rental_Property 
     Group By managerId; 
End; 

Der Teil I Probleme, bin ist die obige Prozedur group by gruppiert alle Tupel, die die gleiche managerId zusammen haben. Nun, wie ich so die Ergebnisse etwas ausdrucken:

Manager m1: Rental_Prop1, Rental_Prop2, Rental_Prop3 
Manager m2: Rental_Prop9, Rental_Prop6, Rental_Prop4 

Antwort

1

Sie list_agg() verwenden können:

Select (managerId || ' ' || 
      list_agg(property_number, ' ') within group (order by property_number) 
      ) 
    Into list_of_properties 
    From Rental_Property 
    Group By managerId; 

Das einzige Problem ist, dass die into den Wert in eine Variable setzt. . . und dies wird einen Fehler erzeugen, wenn die group by mehrere Manager hat.

starten mit dieser Abfrage:

Select managerId, 
     list_agg(property_number, ' ') within group (order by property_number) as properties 
From Rental_Property 
Group By managerId; 

EDIT:

ich sehe. Wenn Sie die Werte drucken möchten:

Create Or Replace Procedure supervisor_properties 
As 
Begin 
    for x in (Select managerId, 
        list_agg(property_number, ' ') within group (order by property_number) as properties 
       From Rental_Property 
       Group By managerId 
      ) 
    loop 
     dbms_output.put_line(x.managerId || ' ' || x.properties); 
    end loop; 
End; 
+0

Hallo, können Sie bitte erklären, was Sie unter „Das einzige Problem ist, dass die in den Wert in eine Variable setzt, und dies wird einen Fehler erzeugen, wenn... Die Gruppe von hat mehrere Manager.? Weil die 'Gruppe von 'nur eine managerId in jeder Gruppe hat. – DF768

+0

@ DF768. . . Das ist es, was das "In" tut. Beginnen Sie mit der zweiten Abfrage. –

Verwandte Themen