2016-03-09 1 views
0

Я хочу объединить значения из 1 столбца и группы другим. Я видел много решений для этого (используя, например, FOR XML PATH('')), но я не встречал тот, который использует более 1 таблицы. Мне нужна вторая таблица, чтобы отфильтровать некоторые записи, и я не могу понять, как это сделать. Мои данные выглядит следующим образом:Объединить значения столбцов в строку, используя более 1 таблицы данных

SONo  PartNo 
1 A04000.1 M41000M 
2 A04000.1 M52000M 
3 A04001.1 V31255 
4 A04001.1 V32895 

Я хочу, чтобы выглядеть следующим образом:

SONo   PartNo 
1 A04000.1  M41000M, M52000M 
2 A04001.1  V31255, V32895 

Мой запрос выглядит следующим образом:

SELECT  SUBSTRING(Table1.ID, 5, 10) AS SONo, Table1.PartNo 
FROM   Table1 INNER JOIN 
        Table2 ON Table1.PartNo = Table2.PartNo 
WHERE  (Table2.StoreNo = '13') 
ORDER BY SONo 

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

Спасибо.

+1

Возможный дубликат (http://stackoverflow.com/questions/451415/simulating-group-concat-mysql-function- in-sql-server) – lad2025

+1

Вы ищете 'GROUP_CONCAT (MySQL)/LISTAGG (Oracle)/string_agg (Postgresql)' эквивалент для MS SQL Server. Я предлагаю использовать 'STUFF + FOR XML'. Дополнительная информация и сравнение ** [Конкатенирование значений строк в Transact-SQL] (https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/) * * – lad2025

ответ

0

Хорошо, поэтому я понял. Я сохранил свой запрос в виде представления, затем использовал FOR XML PATH (''), и он работает, если немного замедлить рендер. Вот мой новый запрос: [? Симуляция группа \ _concat функции MySQL в SQL Server]

SELECT t1.SalesOrderNo, 
    STUFF((SELECT ', '+t2.PartNo 
      FROM dbo.SOCuttersUsed t2 
      WHERE t1.SalesOrderNo = t2.SalesOrderNo FOR XML PATH('')),1,1,'') AS PartNo 
FROM dbo.SOCuttersUsed t1 
GROUP BY t1.SalesOrderNo 
ORDER BY SalesOrderNo 
Смежные вопросы