我有以下数据。
create table #temp
(
date date primary key
,registrations int not null default(0)
,orders int not null default(0)
)
insert into #temp
(
date ,
registrations
,orders
)values('2017-05-01',30,40),('2017-05-02',60,30),('2017-05-03',109,98)
select * from #temp
对于数据将保持添加的每个日期。这是非常有活力的。无论如何,如果@from_dt和@to_dt作为参数提供,则使用动态日期来转动数据。输出应如下所示。
2017-05-01 2017-05-02 2017-05-03
registrations 30 60 109
orders 40 30 98
我在SQLServer和MySQL数据库中有相同的数据。
任何帮助表示赞赏。提前致谢。
答案 0 :(得分:0)
Declare @Date1 date = '2017-05-01'
Declare @Date2 date = '2017-05-02' -- Notice only Two Days
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([Date]) From #temp Where [Date] between @Date1 and @Date2 Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select *
From (
select [Date]
,B.*
From #temp
Cross Apply (values (''Orders'',orders)
,(''Registrations'',registrations)
) B(Item,Value)
Where [Date] between '''+convert(varchar(10),@Date1,120)+''' and '''++convert(varchar(10),@Date2,120)+'''
) A
Pivot (sum(Value) For [Date] in (' + @SQL + ') ) p'
Exec(@SQL);
<强>返回强>
Item 2017-05-01 2017-05-02
Orders 40 30
Registrations 30 60