SQL Server 递归实现

需求:

根据查询传入的参数,自动带出区间内的数据,表中有数据的状态显示已登入,无数据的状态显示未登入

 

问题:

目前系统中,只存有已登入的资料,且前台查询时输入的日期区间间隔不固定。

 

表结构如下:

门店表:存储门店明细信息

门店业绩表:存储门店每日业绩(需要门店每日登入当天的业绩,未登入的天,系统中则不存在此记录)

 

 

实现难点,需要用一个查询SQL,生成选择的日期区间的数据

 

幸好在SQL Server 2005及以后的版本中,出现了递归的功能,

 

用一下语句,实现了产出不定区间的日期数据记录:

WITH DT
AS
(   SELECT cast( DateStart as datetime) as ep_date  UNION ALL
    SELECT DATEADD(Day,1,ep_date) FROM DT WHERE DATEADD(Day,1,ep_date) <=cast(DateEnd as datetime)
)
Select * from dt

 

 

之后,再改写以上的SQL ,实现需求:

WITH DT
AS
(   SELECT cast( DateStart as datetime) as ep_date  UNION ALL
    SELECT DATEADD(Day,1,ep_date) FROM DT WHERE DATEADD(Day,1,ep_date) <=cast(DateEnd as datetime)
)
Select c.*,case when d.status is null then 1 lese 2 end as status
(Select a.ep_date,b.counter_no from dt a,counter b)  c left join performance d on c.counter_no=d.counter_no and c.ep_date = d.ep_date
 
 

 

猜你喜欢

转载自quentinxu.iteye.com/blog/1879263