2017-10-02 3 views
3

Ich habe die unten stehende Tabelle:Gruppe Mehrere Zeilen in einreihig

| ID | Description| Shelf | QTY | 
---------------------------------------- 
| 10 | Apples  | 1 | 24 | 
| 10 | Apples  | 2 | 28 | 
| 10 | Apples  | 6 | 12 | 
| 15 | Oranges  | 2 | 8 | 
| 15 | Oranges  | 6 | 33 | 

Ich brauche eine Aktualisierung dieser Tabelle zu tun, und das Regal und Menge als Gruppe in zusammen, wie unten dargestellt:

| ID | Description| Availability | 
------------------------------------------- 
| 10 | Apples  | 1-24, 2-28, 6-12 | 
| 15 | Oranges  | 2-8, 6-33   | 

Grundsätzlich versuchen wir, das Regal und die Menge in einer einzigen Zeile zu gruppieren. Dies ist nur für Berichtszwecke, also muss ich die Daten auf diese Weise anzeigen.

Bisher kann ich die zwei Spalten angezeigt werden sie durch Verkettung und das Hinzufügen des dash:

SELECT ID, Description, Shelf || '-' || QTY AS Availability FROM tbl_Products 

sie zusammen in einer einzigen Zeile zu nähen, ich bin ziemlich sicher, dass ich eine Weile nicht verwenden können Führen Sie eine Schleife durch, um die Werte durchzulaufen, und erstellen Sie das Feld Verfügbarkeitszeichenfolge, bevor Sie es in eine temporäre Tabelle einfügen und anschließend an den Bericht senden.

Aber ich bin mir nicht sicher über die Leistung. Da diese Abfrage in einer großen Tabelle ausgeführt wird, mache ich mir nur Sorgen, dass es die Datenbank jedes Mal verlangsamen wird, wenn der Bericht abgerufen wird.

Gibt es einen anderen einfacheren Weg, den ich erreichen kann?

+1

Kann es NULL-Werte sein? Und deine Version von Postgres? –

Antwort

3

string_agg wird die Rechnung passen genau:

SELECT id, description, STRING_AGG(shelf || '-' || qty, ', ') AS Availability 
FROM  tbl_Products 
GROUP BY id, description 
2

Sie string_agg() verwenden können:

select id, description, 
     string_agg(shelf || '-' || qty, ', ') as availability 
from t 
group by id, description;