在反向轴中需要帮助 - 列名称变为数据,然后变为该列中的值

时间:2015-05-21 22:08:04

标签: sql-server tsql pivot

我希望从表中提取数据并将结果插入到#temp表中,其中列名是结果集的一部分。我知道我可以从架构信息表中获取列名,但我需要其中一列中的数据。原始表中只有一行,所以我基本上是在执行反向STUFF命令或反转Pivot。结果集将是columnName和Value,但是多行 - 与列

一样多的行

所以基本上结果集或表只有2列,一列用于列名,一列用于该列中的值。这是我的目标。我知道一个枢轴反过来但是似乎找不到“反向枢轴”。我正在使用SQL Server 2008.

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

您是否能够更好地描述您之后的情况?例如,有关表结构等的更多信息

不管。请参阅下面的示例,了解使用CROSS APPLY语句转换“数据透视表”的示例。进入一张平台。

数据透视表中的数据

+----+-----------+----------+----------------+
| Id | FirstName | LastName |    Company     |
+----+-----------+----------+----------------+
|  1 | Joe       | Bloggs   | A Company      |
|  2 | Jane      | Doe      | Lost and Found |
+----+-----------+----------+----------------+

将数据透视表转换为平面表的SQL语句

IF OBJECT_ID('PivotedTable', 'U') IS NOT NULL
    DROP TABLE PivotedTable

GO

CREATE TABLE PivotedTable (
    Id INT IDENTITY,
    FirstName VARCHAR(255),
    LastName VARCHAR(255),
    Company VARCHAR(255)
)

INSERT PivotedTable (FirstName, LastName, Company)
    VALUES ('Joe', 'Bloggs', 'A Company'), ('Jane', 'Doe', 'Lost and Found')


SELECT
    FlatTable.ColumnName,
    FlatTable.Value
FROM PivotedTable t
CROSS APPLY (
VALUES
('FirstName', FirstName),
('LastName', LastName),
('Company', Company)
) FlatTable (ColumnName, Value)

转入平台后输出查询

+------------+----------------+
| ColumnName |     Value      |
+------------+----------------+
| FirstName  | Joe            |
| LastName   | Bloggs         |
| Company    | A Company      |
| FirstName  | Jane           |
| LastName   | Doe            |
| Company    | Lost and Found |
+------------+----------------+