Объединение нескольких полей в одно текстовое поле в SQL Server
-
09-09-2019 - |
Вопрос
Итак, у меня есть таблица, которая выглядит следующим образом:
Name ID TaskID HoursAssigned ---------------------------------------------------------------- John Smith 4592 A01 40 Matthew Jones 2863 A01 20 Jake Adams 1182 A01 100 Matthew Jones 2863 A02 50 Jake Adams 2863 A02 10
и я хочу вернуть набор данных, который выглядит следующим образом:
TaskID PeopleAssigned ------------------------------------------------------------ A01 Jake Adams, John Smith, Matthew Jones A02 Matthew Jones, Jake Adams
Проблема здесь в том, что я понятия не имею, сколько людей назначено на данную задачу.Любые предложения были бы великолепны!
Решение
Этот вопрос здесь задают ежедневно. вот вчерашний.И Еще один
https://stackoverflow.com/questions/tagged/sql+string-concatenation
Другие советы
ПОПРОБУЙ ЭТО:
declare @table table (name varchar(30), ID int, TaskID char(3), HoursAssigned int)
insert into @table values ('John Smith' ,4592 ,'A01' ,40)
insert into @table values ('Matthew Jones',2863 ,'A01' ,20)
insert into @table values ('Jake Adams' ,1182 ,'A01' ,100)
insert into @table values ('Matthew Jones',2863 ,'A02' ,50)
insert into @table values ('Jake Adams' ,2863 ,'A02' ,10)
--formatted so you can see what is happening
SELECT DISTINCT
t1.TaskID
,SUBSTRING(
replace(
replace(
(SELECT
t2.Name
FROM @Table AS t2
WHERE t1.TaskID=t2.TaskID
ORDER BY t2.Name
FOR XML PATH(''))
,'</NAME>','')
,'<NAME>',', ')
,3,2000) AS PeopleAssigned
FROM @table AS t1
НА ОСНОВЕ ВЧЕРАЧЕГО ОТВЕТА!
вот результат:
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
(1 row(s) affected)
TaskID PeopleAssigned
------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
A01 Jake Adams, John Smith, Matthew Jones
A02 Jake Adams, Matthew Jones
(2 row(s) affected)
И, кстати, хранить имена в одном поле — плохая идея.Очень затрудняет запрос.Как бы вы эффективно искали «Смит» без использования подстановочных знаков в качестве первого символа, который не позволяет базе данных использовать индексы.И если имена хранятся в произвольной форме таким образом, человек может быть «Джон Смит», «Смит, Джон», «Смит, Джон», «Смит, Джон» и т. д., и вы не поймете, что это один и тот же человек.У вас должно быть как минимум имя, отчество, фамилия, личный_суффикс, а затем вы можете иметь вычисляемое поле, которое показывает полное имя в формате, который вы хотите отобразить.
Я новичок в sql и новичок в stackoverflow, но разве это не сработает?
ВЫБРАТЬ идентификатор задачи, имя ИЗ таблицы GROUP BY идентификатор задачи