SQL одинаковому блоку между двумя таблицами нужны порядковые номера в 1 ячейке
У меня есть 2 таблицы:
SELECT UnitId FROM dbo.tblUnits
SELECT UnitId, WorkOrderNumber FROM dbo.tblWorkOrders
Мне нужно отобразить все UnitId из dbo.tblUnits, затем в 1 столбце отобразить все WorkOrders, разделенные запятой.
Вот некоторые примеры данных: dbo.tblUnits:
UnitId
123
156
178
dbo.tblWorkOrders
UnitId WorkOrderNumber
123 1
123 2
156 4
178 5
178 9
178 10
Я должен использовать таблицу tblUnits, потому что я извлекаю из нее больше данных, но в конечном результате я хочу показать это:
UnitId WorkOrderNumber
123 1,2
156 4
178 5,9,10
Есть идеи?
Спасибо
4 ответа
Решение
select
UnitId,
stuff((select ', ' + convert(varchar, WorkOrderNumber)
from tblWorkOrders t2 where t1.UnitId = t2.UnitId
for xml path('')),
1,2,'') WorkOrderNumbers
from tblWorkOrders t1
group by UnitId
Попробуй это:
SELECT
t1.UnitId,
substring((SELECT ( ', ' + WorkOrderNumber)
FROM tblWorkOrders t2
WHERE t1.UnitId= t2.UnitId
ORDER BY
UnitId
FOR XML PATH( '' )
), 3, 1000 ) as WorkOrderNumbers
FROM tblWorkOrders as t1
SELECT
UnitId,
STRING_AGG(WorkOrderNumber, ',')
FROM dbo.tblWorkOrders
GROUP BY UnitId
должен дать вам окончательный результат, который вы показали.
Нашел эту хорошую статью на эту тему. Это показывает вам другой способ сделать это.
http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/