Sql server 使用pivot重新排列sql表中的数据

Sql server 使用pivot重新排列sql表中的数据,sql-server,Sql Server,我有以下数据: 2014-10-28 Excess 1025 98297654999.82 2014-10-29 Excess 251 1902171582.07 2014-10-28 Pastdue 1590 7645464003.17 2014-10-29 Pastdue 13 3704776.10 我需要这样的数据: Date ExcessCount ExcessAmt PassCount PassAmt 28/10/2

我有以下数据:

2014-10-28  Excess   1025   98297654999.82
2014-10-29  Excess   251    1902171582.07
2014-10-28  Pastdue  1590   7645464003.17
2014-10-29  Pastdue  13       3704776.10
我需要这样的数据:

Date       ExcessCount  ExcessAmt   PassCount   PassAmt
28/10/2015  1025       98297655000     1590     7645464003
29/10/2015  251        1902171582      13       3704776.1
请告诉我怎么做。

请查看此项

SELECT column1 as date, SUM(ExcessCount) as ExcessCount, SUM(ExcessAmt) as ExcessAmt, SUM(PastdueCount) as PastdueCount, SUM(PastdueAmt) as PastdueAmt
FROM 
(
  select column1,column3,column4, column2+'Count' as tempcol1,column2+'Amt' as tempcol2
  from tablename
) x
pivot
(
  min(column3)
  for tempcol1 in ([ExcessCount], [PastdueCount])
) p
pivot
(
  min(column4)
  for tempcol2 in ([ExcessAmt], [PastdueAmt])
) q
group by column1
将主表列名放在第1列、第2列、第3列和第4列

仅供参考


而不是Pivot
,选择
简单子查询

create table #test
(
dates datetime,
descs varchar(10),
value int,
amount varchar(30)
)

insert into #test values('2014-10-28','Excess',1025,'98297654999.82')
insert into #test values('2014-10-29','Excess',251,'1902171582.07')
insert into #test values('2014-10-28','Pastdue',1590,'7645464003.17')
insert into #test values('2014-10-29','Pastdue',13,'3704776.10')

select * from #test


select distinct a.dates
,(select value  from #test b where descs='Excess' and a.dates=b.dates) as 'ExcessCount'
,(select amount from #test b where descs='Excess' and a.dates=b.dates)  as 'ExcessAmt'
,(select value  from #test b where descs='Pastdue'and a.dates=b.dates) as 'PassCount',
(select amount  from #test b where descs='Pastdue'and a.dates=b.dates)  as 'PassAmt'
from #test a
输出:

dates                    ExcessCount    ExcessAmt     PassCount    PassAmt
2014-10-28 00:00:00.000     1025      98297654999.82    1590     7645464003.17
2014-10-29 00:00:00.000      251          1902171582.07       13     3704776.10

您可以使用条件聚合执行此操作:

select DateColumn,
sum(case when ExcessColumn = 'Excess' then CountColumn else 0 end) as ExcessCount,
sum(case when ExcessColumn = 'Excess' then AtmColumn else 0 end) as ExcessAmt,
sum(case when ExcessColumn = 'Pastdue' then CountColumn else 0 end) as PassCount,
sum(case when ExcessColumn = 'Pastdue' then AtmColumn else 0 end) as PassAtm
from TableName
group by DateColumn

指定上述数据的列名如何将日期2014-10-28更改为2015年10月28日??这背后的逻辑是什么?OP使用pivot@PravinDeshmukh可能是OP不知道还有其他的解决办法。嗨,请考虑接受一个答案,如果它解决了你的问题,那么其他人就可以知道了。