2014-01-15 53 views
0

我的源表如下:這可能使用UNPIVOT?或任何其他邏輯......?

declare @table table (EvalId int, ProjectId int,RT1 int,RT2 int,RT3 int) 

insert into @table 
select 21 evalID,17 ProjectID, 0 RT1,8 Rt2, 7 RT3 
union all 
select 21 evalID,18 ProjectID, 4 RT1,6 Rt2, 1 RT3 

select * from @table 

所需的輸出是:

EvalId ProjectId RT Rating 
21  17   RT1 0 
21  17   RT2 8 
21  17   RT3 7 
21  18   RT1 4 
21  18   RT2 6 
21  18   RT3 1 

我怎樣才能做到這一點使用UNPIVOT?

+0

是。你有沒有關注[UNPIVOT示例](http://technet.microsoft.com/en-us/library/ms177410(v = sql.105).aspx)? (請參閱鏈接中的最後一個例子,訂單〜評級,員工〜RT。) – user2864740

+0

是的,但沒有明確的想法 – Kishore

+1

'SELECT * FROM @ table'是'輸入'。在此之後,UNPIVOT轉型開始了:UNPIVOT({任何名字在這裏}({column1-to-unpivot},{column2-to-unpivot},{column3-to -unpivot}))AS {變換表名}' – OzrenTkalcecKrznaric

回答

2
;WITH CTE 
as 
(
    select * from @table 
    UNPIVOT 
    (
     Rating FOR RT IN (RT1,RT2,RT3) 
    ) as pv 
) 
SELECT EvalId 
     ,ProjectId 
     ,RT 
     ,Rating 
FROM CTE 

結果集

╔════════╦═══════════╦═════╦════════╗ 
║ EvalId ║ ProjectId ║ RT ║ Rating ║ 
╠════════╬═══════════╬═════╬════════╣ 
║  21 ║  17 ║ RT1 ║  0 ║ 
║  21 ║  17 ║ RT2 ║  8 ║ 
║  21 ║  17 ║ RT3 ║  7 ║ 
║  21 ║  18 ║ RT1 ║  4 ║ 
║  21 ║  18 ║ RT2 ║  6 ║ 
║  21 ║  18 ║ RT3 ║  1 ║ 
╚════════╩═══════════╩═════╩════════╝ 
+0

坦克ü阿里 使用上述邏輯我可以達到我的要求。 – Kishore

+0

@Kishore不是一個問題很高興它幫助:) –

相關問題