在SqlServer 2012&中使用动态日期列进行数据透视。 MySQL的

时间:2017-06-10 16:25:23

标签: mysql sql sql-server-2012 pivot

我有以下数据。

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数据库中有相同的数据。

任何帮助表示赞赏。提前致谢。

1 个答案:

答案 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