T-SQL Pivot/Unpivot(转置)列标题需要作为数据行

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

我正在研究一个T-SQL问题,在这个问题上,我需要将行转换为列,并使用UNPIVOT和PIVOT将每个帖子在

没问题。它完全符合我对行/列操作的要求。然而,我真正想做的是让列标题使用的值成为结果中的另一行

我的缩写代码是:

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,并处理所有需要的细节和数据。