Как вернуть несколько значений как одно поле в операторе SELECT - PullRequest
0 голосов
/ 31 августа 2018

У меня такой запрос:

SET @tableHTML =
        N'<table border="1">' +
        N'<tr><th>Data i godzina</th><th>Pozycja</th><th>Lokalizacja</th>' +
        N'<th>Jednostka</th><th>Ilość</th><th>Zamawiający</th>' +
        N'<th>Dostępne na</th>' +
         CAST ( ( SELECT    
                td = CONVERT(smalldatetime, ars.scan_date), '',                 
                td = ars.item, '',                      
                td = ars.loc, '',           
                td = ars.order_unit, '',            
                td = ars.qty, '',               
                td = ars.requesting_user, '',
                --here is the problem       
                td = COALESCE((SELECT DISTINCT itl.loc FROM itemloc JOIN ANP_ResupplyStock AS ars ON itl.item = ars.item),','), ''  
                --end problem                                                                             

                FROM    
                    dbo.ANP_ResupplyStock as ars
                     inner join itemloc as itl on ars.item = itl.item         
                WHERE 
                    requesting_user = dbo.ANP_SplitParameters(@params, ',', 1)
                    AND device_id = dbo.ANP_SplitParameters(@params, ',', 2)
                    --AND sent_logistics = 0 
                    AND sent_purchasing = 0
                    AND itl.qty_on_hand <= 0
                    ORDER BY scan_date
                  FOR XML PATH('tr'), TYPE 
        ) AS NVARCHAR(MAX) ) +
        N'</table>' ;

Результирующий набор выглядит так:

Data i godzina      Pozycja         Lokalizacja Jednostka Ilość Zamawiający Dostępne na

2018-08-31T16:25:00 G353K1120XA0000 ll          Pudelko   9     1613     QCS
2018-08-31T16:25:00 G353K1120XA0000 ll          Pudelko   9     1613     REK
2018-08-31T16:25:00 G353K1120XA0000 ll          Pudelko   9     1613     WGVS1

Как видите, отличается только последний столбец. Я хотел бы, чтобы этот запрос возвращал одну строку со всеми элементами из последнего столбца, перечисленными как одно поле. Я попробовал это с коалесцией, без нее, но я не могу заставить ее работать. Что еще я могу попробовать?

1 Ответ

0 голосов
/ 31 августа 2018

Способ сделать это в SQL Server - использовать функцию STUFF. Чтобы продемонстрировать, как это используется, я приведу упрощенный пример ниже. При этом используется самостоятельное соединение, но его легко изменить.

declare @test1 table
(
fkfield int,
datafield varchar(50)
)

insert into @test1 VALUES
(1,'ABC'),  
(1,'DEF'),   
(2,'xyz'),   
(2,'mno'),
(2,'pqr')

SELECT DISTINCT 
       fkfield,
       Stuff((SELECT ', ' + datafield  
              FROM   @test1 t2 
              WHERE  t2.fkfield  = t1.fkfield 
              FOR XML PATH('')), 1, 2, '') ConCatData
FROM   @test1 t1  

Результаты выглядят так:

1   ABC, DEF
2   xyz, mno, pqr

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...