2014-12-17 4 views
1

별도의 테이블을 결과에 연결하려고하는데 읽은 다른 질문과 완전히 다른 방식으로 연결하려고합니다.여러 행을 연결하는 T-SQL

ClassID 
------- 
1 
2 
3 

그리고 예약 표 원하는 출력이 모든 일이 하나의에 클래스 당 블록에 의해 그룹화 concat'd 얻을 수 있습니다

ClassID Block Day 
------- ----- --- 
1   5  1 
1   4  2 
1   5  2 
2   2  1 
2   3  2 
3   1  1 
3   1  2 
3   1  3 

: 클래스의 테이블이 있습니다 line like :

ClassID Schedule 
------- -------- 
1   5(1,2) 4(2) 
2   1(2) 2(3) 
3   1(1,2,3) 

이게 가능합니까? 다른 허용되는 (가능 쉽다) 출력

ClassID Schedule 
------- -------- 
1   5(1) 5(2) 4(2) 
2   1(2) 2(3) 
3   1(1) 1(2) 1(3) 
+0

가 본을 참조 http://stackoverflow.com/questions/20699636/concatenate-multiple-rows-into-one-field/20699732 # 20699732 – KumarHarsh

답변

0

는 콤마 같은 세퍼레이터와 STUFFFOR XML PATH를 이용하여 열 값의리스트를 연결할 수있을 것이다. 이 경우

, 당신은 한 번 특정 block의 일을 연결하고, 중첩 방식으로 그것을 할 필요가 class

또한이는 GUI 계층에서 수행하는 것이 좋습니다에 더 기반을 연결 옆에 이런 종류의 조작에서는 성능이 문제가 될 수 있습니다.

SQL Fiddle

select classId, stuff(
     (select distinct ' ' + T2.block + '(' + 
     stuff((select ','+ T1.Day 
     from Table1 T1 
     where T1.classId = T2.classId 
     and T1.Block = T2.Block 
     FOR XML PATH ('')), 
       1,1,'') +')' 
     from Table1 T2 
     where T2.classId = T.classId 
     for xml path('')), 1,1,'') 

from Table1 T 
group by classId 
+0

놀랍게도 작동합니다. 정말 고마워요! – SElaschuk

0

사용 :

select ClassID 
    , 
    stuff 
    ((
     select ' ' + t1.Block + '(' + 
     stuff 
      ((
       select ',' + t2.Day 
       from table1 t2 
       where t2.ClassID = t.ClassID and t2.Block = t1.Block 
       for xml path('') 
      ), 1, 1, '') + ')' 
     from table1 t1 
     where t1.ClassID = t.ClassID 
     group by t1.Block 
     for xml path('') 
    ), 1, 1, '') 
from table1 t 
group by t.ClassID 
+1

감사합니다. – SElaschuk