2011-10-24 2 views
1

사례 명세서 (또는 제안한 내용)에 여러 결과가 나타나고 여러 결과가 출력에 반영되도록하고 싶습니다. 그러나 하단의 예제를 사용하여 원하는 결과를 얻지 못합니다. 미리 감사드립니다.T-SQL : 열 값을 행 값으로 옮깁니다.

ID Phase Total Hours Team1 Team2 Team3 
1 Test  50  25  10 15 
2 QA  60  20  20 20 
3 Impl  40  0  20 20 

찾고 : :

현재

ID Phase Total Hours Team Name Team Hour 
1 Test  50  Team 1  25 
1 Test  50  Team 2  10 
1 Test  50  Team 3  15 
2 QA  60  Team 1  20 
2 QA  60  Team 2  20 
2 QA  60  Team 3  20 
3 Impl  40  Team 2  20 
3 Impl  40  Team 3  20 



Select ID, Phase, Total Hours, 
case 
When Team1 is not null and Team1 is >0 then 'Team1' 
When Team2 is not null and Team2 is >0 then 'Team2' 
When Team3 is not null and Team3 is >0 then 'Team3' 
end as 'Team Name', 

case 
When Team1.Hrs is not null and Team1.Hrs is >0 then Team1.Hrs 
When Team2.Hrs is not null and Team2.Hrs is >0 then Team2.Hrs 
When Team3.Hrs is not null and Team3.Hrs is >0 then Team3.Hrs 
end as 'Team Hours' 

From DB.DBNAME 
+0

샘플 쿼리는 무엇을 생성합니까? – JNK

답변

0

미운하지만 ...

SELECT ID, Phase, [Total Hours], 'Team1' AS Team, Team1 AS [Team Hours] 
FROM DB.DBNAME 

UNION 

SELECT ID, Phase, [Total Hours], 'Team2' AS Team, Team2 AS [Team Hours] 
FROM DB.DBNAME 

UNION 

SELECT ID, Phase, [Total Hours], 'Team3' AS Team, Team3 AS [Team Hours] 
FROM DB.DBNAME 

이 같은 반환하는 쿼리가 필요한 이유, 그리고 모를 수가 정기적 인 쿼리를 수행하고 클라이언트 측 데이터를 재 배열합니까?

+0

일대일 작업을 수행하는 저장 프로 시저 만들기. 도와 주셔서 감사합니다. –

2

UNPIVOT을 사용하십시오. 예 :

;WITH t AS(
SELECT * FROM (VALUES(1,'Test',50,25,10,15),(2,'QA',60,20,20,20),(3,'Impl',40,0,20,20) 
      )x(ID, Phase, [Total Hours], Team1, Team2, Team3) 
) 
SELECT ID,Phase, [Total Hours], [Team Name], [Team Hour] 
FROM t 
UNPIVOT 
    ([Team Hour] FOR [Team Name] IN (Team1, Team2, Team3)) AS unpvt 
WHERE [Team Hour] > 0 
관련 문제