如何在 MS SQL 中实现行到列的转置 [英] How do I achieve transposing of rows into columns in MS SQL

查看:22
本文介绍了如何在 MS SQL 中实现行到列的转置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两张桌子:

部门 --<员工

Departments --< Employees

部门表有如下数据:

id, Name
1, Marketing
2, Sales

Employees 表有如下数据:

Employees table has data such as:

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

我想为每个部门取回两个数据集,如下所示:

I want to get two data sets back as follows for each department:

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

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

我必须编写一个 MS SQL 2008 存储过程来实现这个结果?

I have to write a MS SQL 2008 Stored procedure which achieves this result?

感谢任何帮助

推荐答案

好的,先看看这个链接,因为您将需要动态 SQL.那么您可以尝试以下操作:

Ok, First take a look at this link, since you are gonna need dynamic SQL. Then you can try the following:

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)

这篇关于如何在 MS SQL 中实现行到列的转置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆