1


0

Comment réaliser la transposition de lignes en colonnes dans MS SQL

J’ai deux tables:

Départements - <Employés

La table des départements contient des données telles que:

id, Name
1, Marketing
2, Sales

Le tableau Employés contient des données telles que:

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

Je veux récupérer deux ensembles de données comme suit pour chaque département:

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

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

Je dois écrire une procédure stockée MS SQL 2008 qui permet d’atteindre ce résultat?

Toute aide est appréciée

2 Answer


1


Ok, jetez d’abord un œil à http://www.sommarskog.se/dynamic_sql.html par ce lien], car vous allez avoir besoin de SQL dynamique. Ensuite, vous pouvez essayer ce qui suit:

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)