如何将行数据转换为列数据?

时间:2011-04-19 19:06:27

标签: asp.net sql sql-server sql-server-2005 devexpress

我有一个简单的数据表,需要从行数据转换为列数据。例如,让我创建一个简单的员工表:

Employee Table

我需要使用上面的sql表创建一个这样结构的并排比较报告:

Report

有人可以使用上面的示例表向我显示sql代码吗?或者可以使用内置的ASP.net或DevExpress控件自动完成吗?

我们非常感谢您的反馈意见!

谢谢!

3 个答案:

答案 0 :(得分:3)

您正在寻找的是“枢轴”功能。

你可以在SQL中手工完成它们,但是看起来devexpress也可以控制它......

http://www.devexpress.com/Products/NET/Controls/ASP/Pivot_Grid/

- 编辑 -

与上面发布的评论者一样,here's an introduction to the pivot function in SQL Server ...使这一点变得棘手的原因是,除非您确切知道列中将包含哪些值,否则您将必须使用动态SQL来构建数据透视。

因为在SQL中做起来有点棘手,所以我会尝试坚持使用DevExpress,因为你已经拥有它......

我认为,如果您要向您的数据透视网格添加多个数据点,那么它看起来就像您期望的那样。这是一个来自DevExpress的屏幕截图,类似于你正在寻找的......

enter image description here

Here's the page that shows this technique ...在您的情况下,您可以执行“总计”,而不是行分组,然后隐藏该列...

答案 1 :(得分:1)

使用SQL:

WITH FieldValueCte AS(      
SELECT  Name,
        'Department' Field,
        Department Value
FROM    Table1  UNION ALL
SELECT  Name,
        'Sex' Field,
        Sex Value
FROM    Table1  UNION ALL
SELECT  Name,
        'HireDate' Field,
        HireDate Value
FROM    Table1  UNION ALL
SELECT  Name,
        'Salary' Field,
        Salary Value
FROM    Table1  UNION ALL
SELECT  Name,
        'Comments' Field,
        Comments Value
FROM    Table1)

SELECT [Field], [John Doe], [Jane Smith], [Peter Parker], [Jessica James]
FROM
(SELECT Field, Name, Value
    FROM FieldValueCte) AS SourceTable
PIVOT
(
MIN(Value)
FOR Name IN ([John Doe], [Jane Smith], [Peter Parker], [Jessica James])
) AS PivotTable;

答案 2 :(得分:0)