2011-10-27 48 views
1

我有兩個表:如何實現行變調成列在MS SQL

部門 - <員工

系表中有諸如數據:

id, Name 
1, Marketing 
2, Sales 

僱員表有數據如:

id, Name, DepartmentId, RatePerDay 
1, Alex,1, 40 
2, Bob,1, 30 
3, Calvin,1, 40 
4, Dal,1, 30 

我想要得到兩個數據集,如下部門:

DepartmentName, Employee1,Employee12,Employee13,Employee14 
Marketing, Alex, Bob, Calvin, Dal 

DepartmentName, RatePerDay1, RatePerDay2, RatePerDay3, RatePerDay4 
Marketing, 40,30,40,30 

我必須編寫一個MS SQL 2008存儲過程,實現這個結果?

任何幫助表示讚賞

+1

有很多相同的問題'行的列tsql' – sll

+0

[?SQL Server的PIVOT也許(可能重複http://stackoverflow.com/questions/7182106/sql-server-pivot-maybe) –

回答

1

好的,首先看看this link,因爲你需要動態SQL。然後,你可以嘗試以下方法:

DECLARE @EmployeesId VARCHAR(MAX), @EmployeesIdAlias VARCHAR(MAX), @Query1 VARCHAR(MAX), @Query2 VARCHAR(MAX) 
DECLARE @Rates VARCHAR(MAX), @RatesAlias VARCHAR(MAX) 

SELECT @EmployeesId = ISNULL(@EmployeesId + ',', '') + '[' + CAST(Id AS VARCHAR(10)) + ']', 
     @EmployeesIdAlias = ISNULL(@EmployeesIdAlias + ',', '') + '[' + CAST(Id AS VARCHAR(10)) + '] AS [Employee ' + CAST(Id AS VARCHAR(10)) + ']', 
     @RatesAlias = ISNULL(@RatesAlias + ',', '') + '[' + CAST(Id AS VARCHAR(10)) + '] AS [Rate ' + CAST(Id AS VARCHAR(10)) + ']' 
FROM Employees 


SET @Query1 = ' 
SELECT Department, '[email protected]+' 
FROM ( SELECT A.Id, A.Name, B.Name Department 
     FROM Employees A 
     INNER JOIN Department B 
     ON A.DepartmentId = B.Id) Source 
PIVOT(MIN(Name) FOR Id IN ('[email protected]+')) AS PT' 

EXEC(@Query1) 

SET @Query2 = ' 
SELECT Department, '[email protected]+' 
FROM ( SELECT A.Id, A.RatePerDay, B.Name Department 
     FROM Employees A 
     INNER JOIN Department B 
     ON A.DepartmentId = B.Id) Source 
PIVOT(MIN(RatePerDay) FOR Id IN ('[email protected]+')) AS PT' 

EXEC(@Query2) 
+0

謝謝。我有另一個問題,但不知道我是否可以在這裏問你... – InfoLearner