2009-06-03 134 views
0

所以我有一个表,看起来像这样:合并多个字段到一个文本字段在SQL Server

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

这里的问题是,我不知道有多少人被分配到一个给定的任务。任何建议都会很棒!

+0

投票结果如何?我已经说过还有另一个问题回答了这个问题。 – 2009-06-03 20:49:22

+0

+1,他们很难对这里的人 – 2009-06-03 21:08:21

回答

0

我是新来的sql和新的到stackoverflow,但不会这项工作?

SELECT taskid,name FROM table GROUP BY taskid

+2

不,这不行。 – 2009-06-03 20:11:33

+0

GROUP BY仅适用于聚合方法(如COUNT或MAX) – 2009-06-03 20:11:40

+2

谢谢!,还有很多要学习和练习:) – 2009-06-03 20:14:45

1

试试这个:

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) 
1

和BTW,这是一个坏主意,存储在一个字段名。使查询非常困难。如果没有使用通配符作为排除数据库使用索引的第一个字符,您将如何有效地搜索“Smith”?如果名字像这样以任意形式存储,一个人可能是“约翰史密斯”,“史密斯,约翰”,“史密斯,约翰”,“史密斯,约翰”等,你不会意识到他们是同一个人。你应该至少有first_name,middle_name,last_name,personal_Suffix,然后你可能会有一个计算的字段,显示你想要显示的格式的完整名称。

+0

雅我没有实际存储数据,这只是为了简单起见。 – 2009-06-03 20:54:18

相关问题