2009-06-03 7 views
0

J'ai une table qui ressemble à ceci:Combine plusieurs champs dans un champ de texte dans 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

et je veux retourner un ensemble de données qui ressemble à ceci:

TaskID    PeopleAssigned 
------------------------------------------------------------ 
A01     Jake Adams, John Smith, Matthew Jones 
A02     Matthew Jones, Jake Adams

Le problème ici est que je n'aurais aucune idée du nombre de personnes affectées à une tâche donnée. Toute suggestion sera appréciée!

+0

Pour quoi voter? J'ai déjà dit qu'il y avait une autre question qui a répondu à celle-ci. –

+0

+1, ils sont durs sur les gens ici –

Répondre

0

Je suis nouveau sur sql, et nouveau sur stackoverflow, mais cela ne fonctionnerait-il pas?

SELECT taskid, nom FROM table GROUP BY taskid

+2

Non, cela ne fonctionnerait pas. –

+0

GROUP BY ne fonctionne que sur des méthodes agrégées (comme COUNT ou MAX) –

+2

Merci! Encore beaucoup à apprendre et à pratiquer pour moi :) –

1

FAITES L'ESSAI:

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 

EN FONCTION DE RÉPONSE D'HIER!

ici est la sortie:

(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, il est une mauvaise idée de stocker les noms dans un champ. Cela rend très difficile à interroger. Comment rechercheriez-vous efficacement "Smith" sans utiliser de caractères génériques comme premier caractère empêchant la base de données d'utiliser les index. Et si les noms sont stockés libres comme ceci, une personne pourrait être "John Smith", "Smith, John", "Smith, John" "Smith, John" etc. et vous ne réaliseriez pas qu'ils étaient la même personne. Vous devriez avoir un prénom, un prénom, un nom de famille, un suffixe personnel, et vous pouvez éventuellement avoir un champ calculé qui affiche le nom complet dans le format que vous voulez afficher.

+0

Ya Je ne stocke pas les données de cette façon, c'était juste pour des raisons de simplicité. –

Questions connexes