2009-06-03 4 views
0

그래서 나는 다음과 같다 테이블이 있습니다는 SQL 서버에 하나 개의 텍스트 필드에 여러 필드를 결합

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

및 I는 다음과 같습니다 데이터 세트 돌아가려면 :

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

을 여기서 문제는 얼마나 많은 사람들이 주어진 과제에 배정되는지 전혀 모른다는 것입니다. 어떤 제안이라도 좋습니다!

+0

투표 다운은 무엇입니까? 나는 이미이 질문에 대한 또 다른 질문이 있다고 말했다. –

+0

+1, 그들은 여기 주위의 사람들에게 힘들어. –

답변

0

저는 SQL을 처음 접했고 stackoverflow를 처음 사용했지만 작동하지 않습니까? TASKID

+2

아니,이 작동하지 않을 것이다. –

+0

GROUP은 집계 방법 (COUNT 또는 MAX와 같은)에서만 작동합니다. –

+2

고마워요!, 아직 많이 배우고 저를 위해 연습하십시오. –

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"withouth를 효과적으로 검색하는 방법은 무엇입니까? 그리고 이름이 이와 같이 자유형으로 저장되면 사람은 "John Smith", "Smith, John", "Smith, John" "Smith, John"등일 수 있습니다. Minumum에는 first_name, middle_name, last_name, personal_Suffix가 있어야하며 표시 할 형식으로 완전한 이름을 표시하는 계산 된 필드를 가질 수 있습니다.

+0

예. 실제로 데이터를 저장하는 것이 아닙니다. 이는 단순한 작업이었습니다. –

관련 문제