Search code examples
sql-servert-sqlstring-aggregation

Query to get multiple row into single row


I have a table in which following information are there:

ITEM  WH  BATCH  DOC NO
CLD1  FN   B1      3
CLD1  FN   B1      3
CLD1  FN   B2      3
CLD1  FN   B2      3
CLD1  FN   B3      3
CLD1  FN   B4      3

This is the code which I have used to bring the above values:

select T0.item,t0.wh,t0.batchnum from oibt t0 where t0.DOCNO = '3' and t0.Wh = 'FN'

I need the output like this:

ITEM  WH  BATCH
CLD1  FN   B1,B2,B3,B4

I have used STUFF & For XML coding too but I am not getting the desired output.


Solution

  • The following query should do what you want:

    SELECT ITEM
        ,WH
        ,BATCH = STUFF( (SELECT DISTINCT ', ' + BATCH FROM table1 t WHERE t.ITEM = ITEM FOR XML PATH ('')),1,1,'')
    FROM table1
    GROUP BY ITEM, WH
    

    Updated as per your code sample,

    SELECT T0.Item
        ,T0.Wh
        ,[BATCH REF NO]  = STUFF((SELECT DISTINCT '; ' + US.Batch FROM OIBT US WHERE US.DOCNO = '3' AND US.Wh = Wh AND US.ITEM = ITEM FOR XML PATH('')), 1, 1, '')
    FROM OIBT T0 
    WHERE T0.DOCNO = '3' AND T0.WH = 'FN' 
    GROUP BY T0.ITEM,T0.WH ORDER BY T0.Item