2013-03-14 2 views
1

SQL에 익숙하지 않은 나는 현재 내가 고민하고있는 것과 동일한 문제라고 생각하는 것에 대한 몇 가지 대답을 살펴 보았습니다. 대부분 피벗 기능을 참조하지만, 필자가 필요로하는 것이거나 작동하게 만드는 방법인지는 알 수 없습니다.SQL Server 2005 - 행 열

Key | Plant 
------------- 
12 | 123 
12 | 456 
12 | 789 
13 | 456 
13 | 789 
14 | 123 
14 | 456 
14 | 789 
14 | 012 
14 | 345 
15 | 123 
15 | 456 

I가 내 출력을 얻으려고 :

은 기본적으로 내가 키와 tabel 일부 식물이 있고 출력이 같은 다음과 같습니다 (I는 MS SQL Server 관리 Studio 2005을 사용하고 있습니다) 같은 데이터를 표시 : 키에 연결

Key | Plant 
------------------------------- 
12 | 123, 456, 789 
13 | 456, 789 
14 | 123, 456, 789, 012, 345 
15 | 123, 456 

식물의 수는 매우 다양하지만, 나는 식물 (들)의 문자열로 공장 열에 표시되는 공장 (들)을 가지고 싶습니다 .

답변

2

이 경우 PIVOT 함수가 필요하지 않습니다. 피벗은 시스템 행을 별도의 열로 변환합니다.

select distinct t1.[key], 
    STUFF((SELECT distinct ', ' + t2.plant 
     from yourtable t2 
     where t1.[key] = t2.[key] 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,2,'') plant 
from yourtable t1; 

SQL Fiddle with Demo

+0

- 나는 오류가 발생하기 때문에 (WHERE 절의 '('근처에있는 오류. 쿼리 텍스트를 파싱 할 수 없습니다.) - 또는 아마도 아직은 약간 녹색입니다. 아마도 데이터가 동일한 테이블에 포함되어 있다고 말하는 것이 중요합니다. 에스 그게 문제가된다면? 글쎄, 난 등의 데이터에 넣어했습니다... DISTINCT ttTable을 선택 [키], 다도 ((XML에 대한 + ttTable.Plant ttTable FROM WHERE ttTable [키] = ttTable [키] ','DISTINCT SELECT .value ('.', 'NVARCHAR (MAX)') , 1,2, '') 플랜트 FROM ttTable; 결과로 위의 오류 메시지가 나타납니다. –

+0

다이어그램 및 기준 창을 해제하면 도움이됩니다. 도움을 주셔서 감사합니다. 정말 감사합니다. –

0

이 시도 : 참조 :

당신이 FOR XML PATH을 사용할 수 원하는 결과를 얻으려면

SELECT 
    t1.[Key], 
    STUFF(
      (SELECT ', ' + t2.Plant 
      FROM yourtable t2 
      WHERE t1.[Key] = t2.[Key] 
      FOR XML PATH('')), 
     1, 2, '') 
FROM yourtable t1 
GROUP BY [Key] 
내가 뭔가 잘못하고있을 수도
+0

도움을 주셔서 감사합니다. 정말로 감사드립니다. :) –