将行值用作列,将列用作行

时间:2014-12-18 17:54:08

标签: sql-server sql-server-2008

我尝试创建一个查询,其中我使用pivot将行值转换为列。我能做得很好。但要求是也使用其他列作为行值。

我可以检查我尝试过的表格和查询here。 所需的输出为here

从查询中,我需要' C'为列,然后将其他列(A,B,D和E)作为第一列的行值。

是否可以使用一个透视查询来显示所需的输出?如果没有,那么问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

SQL Fiddle

MS SQL Server 2008架构设置

CREATE TABLE Table1
(
    A varchar(10),
    B varchar(10),
    C int,
    D varchar(10),
    E varchar(10)
)

GO

INSERT INTO Table1 VALUES('A1', 'B1', 1, 'D1', 'E1');
INSERT INTO Table1 VALUES('A2', 'B2', 2, 'D2', 'E2');
INSERT INTO Table1 VALUES('A3', 'B3', 3, 'D3', 'E3');

查询1

DECLARE @cols AS NVARCHAR(MAX),
@query  AS NVARCHAR(MAX)

select @cols =  STUFF((SELECT ',' + QUOTENAME(C) 
                       from Table1
                       group by C
                       order by C
                       FOR XML PATH(''), TYPE
                      ).value('.', 'NVARCHAR(MAX)') 
                      ,1,1,'')

set @query = N';WITH CTE AS
(SELECT *
FROM Table1 UNPIVOT (Vals FOR COLUMNNAMES IN (A,B,D,E))up
)
SELECT *
FROM CTE 
  PIVOT (MAX(Vals)
         FOR C
         IN(' + @cols + N'))p '

exec sp_executesql @query

<强> Results

| COLUMNNAMES |  1 |  2 |  3 |
|-------------|----|----|----|
|           A | A1 | A2 | A3 |
|           B | B1 | B2 | B3 |
|           D | D1 | D2 | D3 |
|           E | E1 | E2 | E3 |