MS SQL объединяет несколько значений в один столбец

В настоящее время у меня есть следующая таблица;

Invoice   Client   Purchase Order
1000      A1       1234
1000      A1       1235
1001      B2       1236
1001      B2       1237
1002      B2       1238

и я ищу быстрый способ добраться до;

Invoice   Client   Purchase Orders
1000      A1       1234 1235
1001      B2       1236 1237
1002      B2       1238

Любая помощь будет оценена!

1 ответ

Решение

В соответствии с вашими данными, принимая таблицу #temp ниже, с образцами данных:

create table #temp (
     invoice int,
     client varchar(5),
    [purchase order]  int
)

insert into #temp
select 1000,'A1',1234  union all
select 1000,'A1',1235  union all
select 1001,'B2',1236  union all
select 1001,'B2',1237  union all
select 1002,'B2',1238

Теперь вы можете использовать приведенный ниже запрос с использованием FOR XML в соответствии с требуемым выводом:

select distinct tp1.invoice,tp1.client,  
(  
    SELECT convert(varchar(10),[purchase order]) + ' ' as [text()]  
    from #temp tp  
    where tp.invoice=tp1.invoice and tp.client=tp1.client  
    for XML path('')  
) as [purchase order]  
from #temp tp1  

Если у вас есть какие-либо вопросы, дайте мне знать.

Другие вопросы по тегам