我尝试创建一个查询,其中我使用pivot将行值转换为列。我能做得很好。但要求是也使用其他列作为行值。
我可以检查我尝试过的表格和查询here。 所需的输出为here。
从查询中,我需要' C'为列,然后将其他列(A,B,D和E)作为第一列的行值。
是否可以使用一个透视查询来显示所需的输出?如果没有,那么问题的最佳方法是什么?
答案 0 :(得分:2)
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 |