Search code examples
sqlstring-aggregation

How can I concatenate multiple values for a single identifier in SQL?


My Code:

SELECT
    o.ORDER_ID
    ,o.ORDER_DESCRIPTION
    ,o.ORDER_DATE
    ,o.ORDER_ITEM_ID
, i.CONCATENATED_ITEM_DESC

FROM ORDERS o

INNER JOIN (
    SELECT i.ITEM_ID,
    CASE 
        WHEN COUNT(i.ITEM_ID > 1) THEN 'CONCATENATE THE DESCRIPTIONS'
    END AS CONCATENATED_ITEM_DESC
    FROM ITEMS i

)i ON o.ORDER_ITEM_ID = i.ITEM_ID
;

This is the desired output

I'm trying to get the description from another table concatenated.


Solution

  • The standard function is listagg():

    SELECT o.*, i.CONCATENATED_ITEM_DESC
    FROM ORDERS o INNER JOIN
         (SELECT i.ITEM_ID,
                 LISTAGG(ITEM_DESC, ', ') WITHIN GROUP )ORDER BY ITEM_DESC) AS CONCATENATED_ITEM_DESC
          FROM ITEMS i
          GROUP BY i.ITEM_ID
         ) 
         ON o.ORDER_ITEM_ID = i.ITEM_ID;
    

    However, many databases have other names for the function, including string_agg() and group_concat().