2011-10-27 18 views
1

MS SQLの列に行の移調を達成しない私は2つのテーブルがあります: - :どのように私は

id, Name 
1, Marketing 
2, Sales 

Employeesテーブルがある

部門<従業員

Departmentテーブルは、次のようなデータを持っています

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

次のように2つのデータセットを戻したいと思います。部門:

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

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

この結果を達成するためのMS SQL 2008のストアドプロシージャを作成する必要がありますか?

すべてのヘルプは

を高く評価され
+1

同じ質問の – sll

+0

可能重複tsql'列に '行が多い(http://stackoverflow.com/questions/7182106 [SQL ServerのPIVOTは、おそらく?]/sql-server-pivot-아마도) –

答えて

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