2013-10-21 3 views
0

I가 다음 두 표2 테이블을 병합하여 결과가 병합/병합되도록하려면 어떻게해야합니까?

표 :

TID   |Traning 
--------------------------- 
1   |Training 1 
2   |Training 2 
3   |Training 3 

표 2 :

나는 결과는 다음과 같아야 있도록 새로운 뷰를 구성 할
ID  |TID  |Status 
----------------------------------- 
1234567 |1   |1 
1234567 |2   |1 
1234567 |3   |1 

,

결과 :

ID  |[Training 1 Status] |[Training 2 Status] |[Training 3 Status] 
------------------------------------------------------------------------------ 
1234567 |1     |1     |1 

SQL Server에서 어떻게 구현합니까?

감사합니다.

+1

봐 ... http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx – David

답변

0
CREATE TABLE #table1 
    (
     ID VARCHAR(10) , 
     TID INT , 
     Status INT 
    ) 
CREATE TABLE #table2 (TID INT, Training varchar(10)) 

--DROP TABLE #table1,#table2 


INSERT INTO #table1 
     (ID, TID, Status) 
SELECT '1234567' AS [ID] , 
     '1' AS [TID] , 
     '1' AS [Status] 
UNION ALL 
SELECT '1234567' AS [ID] , 
     '2' AS [TID] , 
     '1' AS [Status] 
UNION ALL 
SELECT '1234567' AS [ID] , 
     '3' AS [TID] , 
     '1' AS [Status] 

INSERT INTO #table2 
     (TID , 
      [Training] 
     ) 
     SELECT '1' AS [TID] , 
       'Training 1' AS [Training] 
     UNION ALL 
     SELECT '2' AS [TID] , 
       'Training 2' AS [Training] 
     UNION ALL 
     SELECT '3' AS [TID] , 
       'Training 3' AS [Training] 


SELECT * 
FROM #table1 


SELECT * 
FROM #table2; 



WITH temp_CTE AS (SELECT a.ID,b.TID,a.[Status] AS [Training Status] 
FROM #table1 a INNER JOIN #table2 b ON a.TID=b.TID) 



SELECT ID , 
     [1] AS [Training1] , 
     [2] AS [Training2] , 
     [3] AS [Training3] 
FROM (SELECT ID , 
        TID , 
        [Training Status] 
      FROM  temp_CTE 
     ) p PIVOT 
(MAX([Training Status]) FOR tid IN ([1], [2], [3])) AS pvt 

위의 코드에서 꼭 필요한 것은 피벗과 조인 명령입니다. 이전 코드는 테이블을 작성하는 것으로 데이터를 실험 할 수 있습니다.

+0

감사합니다. 열 이름을 동적으로 가져올 수 있습니까? 나는 언급하지 않기를, ''훈련 1 'AS [훈련]'등? –

+0

예를 들어'[1] AS [Training1]'을 할 때 Inner Join이 필요한 이유는 무엇입니까? 나는 내부 조인없이 그것을 달성 할 수있다. 여기를 보아라. http://sqlfiddle.com/#!3/595d2/5. 내가 빠진 것이 있습니까? –

+0

방금 ​​CTE 내부의 조인을 사용하여 두 테이블을 결합하여 요구 사항에 맞는 조인 유형을 결합했습니다. 예 # table2의 교육 열에 따라 교육 열을 선택하는 동적 SQL을 만들 수 있습니다. –

0

이 시도 :

은`PIVOT` 명령에
SELECT ID,[1] AS [Training 1 Status] , [2] AS [Training 2 Status],[3] AS [Training 3 Status] FROM 
(SELECT DISTINCT Table_2.[ID],Table_2.TID,Table_2.[Status] FROM Table_1 INNER JOIN 
Table_2 ON Table_1.TID=Table_2.TID) [Source_Tab] PIVOT 
(MAX([Status]) FOR [TID] IN ([1],[2],[3])) AS [Pivot_Tab]; 
관련 문제