求教SQL语句(100)

W

wfeiyue

Unregistered / Unconfirmed
GUEST, unregistred user!
已知表记录如下:开始日期 结束日期 月数2010-01-01 2010-01-31 1 2010-03-01 2010-03-31 1 2010-04-01 2010-04-30 1 如何得到如下记录:开始日期 结束日期 月数2010-01-01 2010-01-31 1 2010-03-01 2010-04-30 2
 
D

duxing

Unregistered / Unconfirmed
GUEST, unregistred user!
select 开始日期, 结束日期, (DATEPART(month, 结束日期) - DATEPART(month, 结束日期) + 1) as 月份 from 表
 
H

haidy

Unregistered / Unconfirmed
GUEST, unregistred user!
duxing,你那个应该不行,显示的结果应该还是3行,没有把3月和4月合并select a.开始日期, 结束日期=IsNull(b.结束日期, a.结束日期), 月数=DateDiff(month, a.开始日期, IsNull(b.结束日期, a.结束日期)) from 表 a left outer join 表 b on datediff(day, a.结束日期, b.开始日期)=1 left outer join 表 c on datediff(day, c.结束日期, a.开始日期)=1where c.开始日期 is null
 
W

wfeiyue

Unregistered / Unconfirmed
GUEST, unregistred user!
呵呵,谢谢上面2位,haidy的SQL在记录为如下:2010-01-01 2010-01-31 1 2010-02-01 2010-02-28 1 2010-03-01 2010-03-31 1 2010-04-01 2010-04-30 1 时显示:2010-01-01 2010-02-28 1 咳,自己用了一个游标实现了。haidy能否再优化下啊?
 
W

wfeiyue

Unregistered / Unconfirmed
GUEST, unregistred user!
K

killbill2010

Unregistered / Unconfirmed
GUEST, unregistred user!
你的需求不是很明确,我猜你是要用2010-03-01做分界线,之前的做一个合计,之后的做一个合计我有一种很笨的写法,效率不高select min(d_begindate) d_begindate, max(d_enddate) d_enddate, count(*) l_count from tdate where d_enddate < to_date('20100301', 'yyyymmdd')union allselect min(d_begindate) d_begindate, max(d_enddate) d_enddate, count(*) l_count from tdate where d_begindate >= to_date('20100301', 'yyyymmdd')
 
H

hctdnjy

Unregistered / Unconfirmed
GUEST, unregistred user!
是不是要把连贯的日期个并,再计算月份数呀?没大明白需求.
 
W

wfeiyue

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 

Similar threads

回复
0
查看
658
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
903
SUNSTONE的Delphi笔记
S
D
回复
0
查看
772
DelphiTeacher的专栏
D
顶部