2016-04-15 43 views
-2

我有一个RentTableSQL服务器选择每月的租车计算器

Mark  MonthlyRental dailyRental InDate  OutDate 
------------------------------------------------------------------- 
Mercedes 5000    166,67  01.01.2016 NULL 
Renault  3000    100,00  01.01.2016 20.03.2016 
Ford  4000    133,33  01.02.2016 NULL 

我想作一个报告如下:

Mark MonthlyRental DailyRental InDate  OutDate January February March April 
--------------------------------------------------------------------------------------------------------- 
Mercedes 5000   166,67  01.01.2016 NULL  5000 5000 5000 5000 
Renault  3000   100   01.01.2016 20.03.2016 3000 3000 2000 0 
Ford  4000   133,33  01.02.2016 10.06.2016 4000 4000 4000 4000 
+0

在1月至4月的专栏上列出了什么样的基础/规则,为什么雷诺3月份下降...... – Abhishek

+0

为什么有一个VA lue福特在1月 – Squirrel

回答

2

可能是这样的

-- first into into a #temp table the list of dates that you want to turn to columns 
;with cte (datelist, maxdate) as 
(
    select min(InDate) datelist, max(OutDate) maxdate 
    from RentTable 
    union all 
    select dateadd(mm, 1, datelist), maxdate 
    from cte 
    where datelist < maxdate 
) 
select c.datelist 
into #tempDates 
from cte c 

select * 
from 
(
    select b.Mark,b.MonthlyRental,b.DailyRental,b.InDate,b.OutDate, 
     datename(month, datelist) PivotDate 
    from #tempDates d 
    left join RentTable b 
     on d.datelist between b.InDate and ISNULL(b.OutDate,GETDATE()) 
) x 
pivot 
(
    SUM(MonthlyRental) 
    for PivotDate in ([January],[February],[March],[April]) 
) p; 
+0

但我不能理解x? –

+0

X是子查询的别名 –