【问题标题】:Return Columns as Rows for Single Record将列作为行返回单个记录
【发布时间】:2016-05-13 01:10:34
【问题描述】:

我已经阅读了该站点上的许多帖子以及其他有关使用 PIVOT、UNPIVOT、UNION 和 CROSS JOIN 的帖子,但我似乎无法获得我正在寻找的结果。

我的表格如下所示:

EmployeeName    Salary  Address             City        State   Zip     AdditionalDetails
=========================================================================================
Doe, John       400000  111 Jackson Ave     Nowhere     CA      99999   Reliable 
Blow, Joe       300000  222 Johnson St      Somewhere   ME      00000   Always late

我要展示的是以下内容:

EmployeeName        Doe, John
Salary              400000
Address             111 Jackson Ave
City                Nowhere
State               CA
Zip                 99999
AdditionalDetails   Reliable

我最接近的是使用 UNPIVOT,如下所示,但是,问题是两列被转置,我需要交换它们,但我不知道该怎么做。

SELECT *
FROM
(
    SELECT EmployeeName, Salary, Address, City, State, Zip, AdditionalDetails
    FROM EmployeeDetails
    WHERE EmployeeDetails.EmployeeID=@EmployeeID
) AS SourceTable
UNPIVOT
(
    Value FOR Header IN
    (EmployeeName, Salary, Address, City, State, Zip, AdditionalDetails)
) AS UnpivotTable

所以我得到的是:

Value           Header
Doe, John       EmployeeName
400000          Salary
111 Jackson Ave Address
Nowhere         City
CA              State
99999           Zip
Reliable        AdditionalDetails

如何根据需要显示数据?我首先要说的是,这个查询一次只会返回一个员工记录。我将此数据附加到 CSV 中,并请求以这种方式显示员工记录。

【问题讨论】:

    标签: sql sql-server stored-procedures sql-server-2008-r2 unpivot


    【解决方案1】:

    你快到了:

    你的代码是:

    SELECT *
    FROM
    (
        SELECT EmployeeName, Salary, Address, City, State, Zip, AdditionalDetails
        FROM EmployeeDetails
        WHERE EmployeeDetails.EmployeeID=@EmployeeID
    ) AS SourceTable
    UNPIVOT
    (
        Value FOR Header IN
        (EmployeeName, Salary, Address, City, State, Zip, AdditionalDetails)
    ) AS UnpivotTable
    

    你应该有:

    SELECT Header, Value
    FROM
    (
        SELECT EmployeeName, Salary, Address, City, State, Zip, AdditionalDetails
        FROM EmployeeDetails
        WHERE EmployeeDetails.EmployeeID=@EmployeeID
    ) AS SourceTable
    UNPIVOT
    (
        Value FOR Header IN
        (EmployeeName, Salary, Address, City, State, Zip, AdditionalDetails)
    ) AS UnpivotTable
    

    结果:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      相关资源
      最近更新 更多