Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL SELECT - group multiple values on a single row

I have a table with the following data:

ID  CAT  TYPE   SUBPRODUCT
--- ---- ------ ----------------
1   1     1       AA
2   1     1       BB
3   1     2       CC

I'd like to get the data like this:

CAT   TYPE   SUBPRODUCT
----- ------ ---------------
1     1      AA,BB
1     2      CC

pls reply me what should i do.

Thanks.

like image 350
Saw Al Gor Avatar asked Aug 25 '26 19:08

Saw Al Gor


1 Answers

You can use FOR XML PATH. While a bit hard to read, afaik it currently is the most concise way to concatenate strings.

Breakdown

  • FOR XML PATH concatenates all values that match the subselect
  • STUFF removes the leading comma

SQL Statement

SELECT  q.CAT
        , q.TYPE
        , SUBPRODUCT = STUFF((SELECT ', ' + qi.SUBPRODUCT FROM q qi WHERE qi.Cat = q.Cat AND qi.Type = q.Type FOR XML PATH('')), 1, 2, '')
FROM    q
GROUP BY
        q.CAT
        , q.TYPE

Test script

;WITH q AS (
  SELECT * FROM (VALUES 
    (1, 1, 1, 'AA')
    , (2, 1, 1, 'BB')
    , (3, 1, 2, 'CC')
  ) AS a (ID, CAT, TYPE, SUBPRODUCT)    
)
SELECT  q.CAT
        , q.TYPE
        , SUBPRODUCT = STUFF((SELECT ', ' + qi.SUBPRODUCT FROM q qi WHERE qi.Cat = q.Cat AND qi.Type = q.Type FOR XML PATH('')), 1, 2, '')
FROM    q
GROUP BY
        q.CAT
        , q.TYPE
like image 55
Lieven Keersmaekers Avatar answered Aug 27 '26 16:08

Lieven Keersmaekers



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!