T-SQL Pivot/Unpivot(转置)列标题需要作为数据行
我正在研究一个T-SQL问题,在这个问题上,我需要将行转换为列,并使用UNPIVOT和PIVOT将每个帖子在 没问题。它完全符合我对行/列操作的要求。然而,我真正想做的是让列标题使用的值成为结果中的另一行 我的缩写代码是:T-SQL Pivot/Unpivot(转置)列标题需要作为数据行,sql,sql-server-2008,tsql,pivot,unpivot,Sql,Sql Server 2008,Tsql,Pivot,Unpivot,我正在研究一个T-SQL问题,在这个问题上,我需要将行转换为列,并使用UNPIVOT和PIVOT将每个帖子在 没问题。它完全符合我对行/列操作的要求。然而,我真正想做的是让列标题使用的值成为结果中的另一行 我的缩写代码是: SELECT * FROM (SELECT fiscalyear, Sum(totalrecords) AS TotalRecords FROM dbo.tbleirstatisticsoverviewsummary
SELECT *
FROM (SELECT fiscalyear,
Sum(totalrecords) AS TotalRecords
FROM dbo.tbleirstatisticsoverviewsummary
WHERE fiscalquarter = 'ALL'
AND branchcode = 'ALL'
GROUP BY fiscalyear,
fiscalquarter,
branchcode) AS p
UNPIVOT (value
FOR colname IN ( totalrecords )) AS unpvt
PIVOT (Max(value) For FiscalYear IN ([2012],[2013],[ALL])) as p
它呈现的是:Colname2012013全部
TotalRecords421227648 其中第一行是列标题 关于如何使列标题成为数据行,有什么想法吗 添加一些示例原始数据 财政总记录 2012 421 2013 227
所有648都有一些令人困惑的事情,你正在做 首先,通常要取消对多个列的IVOT。现在,您正在取消激活一列,而这样做似乎只是为了重命名该列 其次,如果要将数据聚合两次,则PIVOT应该能够使用
SUM()
处理聚合
第三,不清楚为什么需要列标题作为行,您希望列标题被调用什么
根据示例数据,您应该能够仅应用PIVOT函数:
select 'TotalRecords' TotalRecords,
[2012],
[2013],
[All]
from tbleirstatisticsoverviewsummary
pivot
(
sum(totalrecords)
for FiscalYear IN ([2012],[2013],[ALL])
) p;
看。然后,如果您想要具有列标题的行,则可以使用UNION ALL:
select 'colname' col1,
2012 col2,
2013 col3,
'All' col4
union all
select 'TotalRecords' TotalRecords,
[2012],
[2013],
[All] = cast([all] as varchar(10))
from tbleirstatisticsoverviewsummary
pivot
(
sum(totalrecords)
for FiscalYear IN ([2012],[2013],[ALL])
) p;
请参见谢谢您的回复。对于你的观点1)为了节省空间,我省略了其他多个列(以后我将使用SQL FIDLE,但我从来没有这样做过)。2) 我将尝试3)为什么我需要它们…因为基本上它们提供了其他内容…其中列标题(本例中为会计年度)需要在数据结果中…而不是作为列名。再次感谢。@todd如果您在unpivot中使用了多个列,则必须包含所有必要的详细信息,以正确回答问题。提供最少的细节会使回答您的问题变得非常困难。我建议编辑sql,并处理所有需要的细节和数据。