2014-11-27 2 views
0

테이블 : 샘플PIVOT 값

ID  Day Status MS 
---------------------------- 
1  1  0  10 
1  2  0  20 
1  3  1  15 
2  3  1  3 
2  30  0  5 
2  31  0  6 

예상 결과 :

ID Day1 Day2 Day3....Day30 Day31 Status1 Status2 Status3...Status30 Status31 
--------------------------------------------------------------------------------------- 
1 10 20 15  NULL NULL  0  0  1   NULL  NULL 

2 NULL NULL 3  5  6  NULL  NULL  1   0   0 

I는 1부터 31까지의 매일의 MS and Status 값을 얻으려면 각 ID.

나는 PIVOT을 사용하여 아래 결과를 얻었습니다.

결과 :

ID Day1 Day2 Day3....Day30 Day31 
------------------------------------- 
1 10 20 15  NULL NULL 

2 NULL NULL 3  5  6 

검색어 :

SELECT 
    ID 
    ,[1]  AS Day1 
    ,[2]  AS Day2 
    ,[3]  AS Day3 
     . 
     . 
     . 
    ,[30] AS Day30 
    ,[31] AS Day31 
FROM 
(
    SELECT 
     ID 
     ,[Day] 
     ,MS 
    FROM 
     Sample 
) AS A 
PIVOT 
(
    MIN(MS) 
    FOR [Day] IN([1],[2],[3],...[30],[31]) 
) AS pvtTable 

가 어떻게 결과에 상태 열을 병합 할 수 있습니다?

+0

은 단순히 하나 개의 테이블 'T1'으로 얻은 결과를 고려하고 난 당신이 말한 것을 시도 상태 'T2'와 두 번째 옵션 즉와 같은 작성하고 ID를 – brykneval

+0

로 가입 할 수 있습니다. 하지만 단일 PIVOT을 사용하여이를 수행 할 수있는 가능성이 있습니다. –

답변

2

시도해보십시오. 또 다른 Pivot ~ 을 사용하십시오.Status 컬럼을 사용하십시오. 그런 다음 그룹이있는 선택 열 목록에 Id의 집계 (Max 또는 Min)를 사용하여 결과를 얻으십시오.

CREATE TABLE #est 
    (ID INT,[Day] INT,[Status] INT,MS INT) 

INSERT #est 
VALUES (1,1,0,10),(1,2,0,20),(1,3,1,15), 
     (2,3,1,3),(2,30,0,5),(2,31,0,6) 


SELECT ID, 
     Max([Day1]) [Day1], 
     Max([Day2]) [Day2], 
     Max([Day3]) [Day3], 
     Max([Day30]) [Day30], 
     Max([Day31]) [Day31], 
     Max([status1]) [status1], 
     Max([status2]) [status2], 
     Max([status3]) [status3], 
     Max([status30])[status30], 
     Max([status31])[status31] 
FROM (SELECT Id, 
       'status' + CONVERT(VARCHAR(30), Day) col_stat, 
       'Day' + CONVERT(VARCHAR(30), Day) Col_Day, 
       [status], 
       ms 
     FROM #est) a 
     PIVOT (Min([ms]) 
      FOR Col_Day IN([Day1],[Day2],[Day3],[Day30],[Day31])) piv 
     PIVOT (Min([status]) FOR col_stat IN ([status1],[status2],[status3],[status30],[status31])) piv1 
GROUP BY id