I have the table below:
|  ID  |  Description|  Shelf  |  QTY  |
----------------------------------------
|  10  | Apples      |    1    |   24  |
|  10  | Apples      |    2    |   28  |
|  10  | Apples      |    6    |   12  |
|  15  | Oranges     |    2    |   8   |
|  15  | Oranges     |    6    |   33  |
I need to do some updating to this table and put the Shelf and QTY in together as a group as shown below:
|  ID  |  Description|    Availability    |
-------------------------------------------
|  10  | Apples      |  1-24, 2-28, 6-12  |
|  15  | Oranges     |  2-8, 6-33         |
Basically, we are trying to group the shelf and QTY in one single line. This is for reporting purposes only so I have to display the data in that way.
So far, I am able to display the two columns by concatenating them and adding the dash:
SELECT ID, Description, Shelf || '-' || QTY AS Availability FROM tbl_Products
To stitch them up together in a single line, I'm pretty sure I can use a WHILE loop to loop through the values and create the Availability string field before inserting it back to a temporary table then printing that out to the report.
But I'm not too sure about the performance. Since this query will be run in a big table, i'm just worried that it will slow down the database each time the report is being pulled.
So is there any other easier way I can achieve this?
string_agg will fit the bill exactly:
SELECT   id, description, STRING_AGG(shelf || '-' || qty, ', ') AS Availability
FROM     tbl_Products
GROUP BY id, description
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With