Как мне добиться транспонирования строк в столбцы в MS SQL - PullRequest
1 голос
/ 27 октября 2011

У меня есть две таблицы:

Отделы - <Сотрудники </p>

Таблица отделов содержит такие данные, как:

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, которая достигает этого результата?

Любая помощь приветствуется

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Хорошо, сначала взгляните на эту ссылку , так как вам понадобится динамический 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, '+@EmployeesIdAlias+'
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 ('+@EmployeesId+')) AS PT'

EXEC(@Query1)

SET @Query2 = '
SELECT Department, '+@RatesAlias+'
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 ('+@EmployeesId+')) AS PT'

EXEC(@Query2)
1 голос
/ 27 октября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...