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
 
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值