Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中将多个字段合并为一个文本字段_Sql_Sql Server_Tsql_String Concatenation - Fatal编程技术网

在SQL Server中将多个字段合并为一个文本字段

在SQL Server中将多个字段合并为一个文本字段,sql,sql-server,tsql,string-concatenation,Sql,Sql Server,Tsql,String Concatenation,我有一张桌子,看起来像这样: Name ID TaskID HoursAssigned ---------------------------------------------------------------- John Smith 4592 A01 40 Matthew Jones 2863 A01

我有一张桌子,看起来像这样:

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 我想返回一个如下所示的数据集:

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
这里的问题是,我不知道有多少人被分配到一个给定的任务。任何建议都很好

我不熟悉sql,也不熟悉stackoverflow,但这不管用吗


选择taskid,name FROM table GROUP BY taskid

我是sql新手,也是stackoverflow新手,但这不管用吗


按taskid从表组中选择taskid、名称

这里每天都会问这个问题。及


这里每天都有人问这个问题。及

试试这个:

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
试试这个:

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

顺便说一句,在一个字段中存储名称是个坏主意。这使得查询变得非常困难。如果不使用通配符作为阻止数据库使用索引的第一个字符,您将如何有效地搜索Smith。如果名字是这样自由存储的,一个人可能是约翰·史密斯,史密斯,约翰,史密斯,约翰·史密斯,约翰·史密斯,约翰·史密斯等等,你不会意识到他们是同一个人。你应该至少有名字、中间名、姓氏、个人后缀,然后你可以有一个计算字段,以你想要的格式显示全名。

顺便说一句,把名字存储在一个字段中是个坏主意。这使得查询变得非常困难。如果不使用通配符作为阻止数据库使用索引的第一个字符,您将如何有效地搜索Smith。如果名字是这样自由存储的,一个人可能是约翰·史密斯,史密斯,约翰,史密斯,约翰·史密斯,约翰·史密斯,约翰·史密斯等等,你不会意识到他们是同一个人。你应该至少有名字、中间名、姓氏、个人后缀,然后你可以有一个计算字段,以你想要的格式显示全名。

Right!我错过了那些。我的错!最后一个问题。没问题-这个网站上的搜索和标记还不够好,人们在提问之前还没有找到这些例子。对!我错过了那些。我的错!最后一个问题。没问题-这个网站上的搜索和标记还不够好,人们在提问之前还没有找到这些例子。投票被否决是怎么回事?我已经说过,还有一个问题可以回答这个问题。+1,他们对周围的人很苛刻。投票被否决是怎么回事?我已经说过,还有一个问题可以回答这个问题。+1,他们对周围的人很苛刻。我并不是真的那样存储数据,这只是为了简单。我不是真的那样存储数据,这只是为了简单。