sql server中的数据透视表

时间:2015-01-28 11:02:50

标签: sql sql-server pivot

将表格数据设为:

 d1  d2  MON REPORT_DATE   

 67 46  Dec 2014-12-19 06:19:05.337

 69 46  Dec 2014-12-22 06:21:47.430

 67 85  Jan 2015-01-23 06:08:09.030

我需要一个结果集

      DEC  JAN
D1    69    67

D2    46    85

到目前为止

SELECT *
FROM  (SELECT PerValueStreamOnAutoDiags,
              PerProdSupportOnAutoDiags,
              LEFT(Datename(Month, ReportDate), 3)[Month],
              ReportDate
       FROM   Temp_AutoApprovalMembercnt)AS s
      PIVOT ( Max(ReportDate)
            FOR [month] IN (dec,
                            jan) )AS p 

2 个答案:

答案 0 :(得分:0)

您需要透视数据重新聚合它,因为您正在交换行和列。以下是使用聚合和union all

的方法
select 'd1' as col, max(case when mon = 'Dec' then d1 end) as dec,
       max(case when mon = 'Jan' then d1 end) as Jan
from Temp_AutoApprovalMembercnt
union all 
select 'd2' as col, max(case when mon = 'Dec' then d2 end) as dec,
       max(case when mon = 'Jan' then d2 end) as Jan
from Temp_AutoApprovalMembercnt;

答案 1 :(得分:0)

这应该有效:

;with cte as
(select * from 
 (select PerValueStreamOnAutoDiags,
          PerProdSupportOnAutoDiags,
          LEFT(Datename(Month, ReportDate), 3)[Month] 
  from Temp_AutoApprovalMembercnt) as s
 unpivot
 (val
  for cols in (PerValueStreamOnAutoDiags,PerValueStreamOnAutoDiags)) as u)

select * from
(select * from cte) as s
pivot
(max(val)
 for [Month] in (DEC,JAN)) as p

Demo

首先取消忽略数据,以便将PerValueStreamOnAutoDiagsPerProdSupportOnAutoDiags放入列中的行中,然后进行数据透视以获取按月汇总的数据。