SQL Server 递归实现
需求:根据查询传入的参数,自动带出区间内的数据,表中有数据的状态显示已登入,无数据的状态显示未登入
问题:
目前系统中,只存有已登入的资料,且前台查询时输入的日期区间间隔不固定。
表结构如下:
门店表:存储门店明细信息
门店业绩表:存储门店每日业绩(需要门店每日登入当天的业绩,未登入的天,系统中则不存在此记录)
实现难点,需要用一个查询SQL,生成选择的日期区间的数据
幸好在SQL Server 2005及以后的版本中,出现了递归的功能,
用一下语句,实现了产出不定区间的日期数据记录:
WITH DT
AS
( SELECT cast( DateStart as datetime) as ep_dateUNION 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_dateUNION 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
页:
[1]