我正在尝试构建一个查询,该查询将根据用户输入的总量(不是日期)显示表中的可用性结果。价格根据日期波动,如酒店。主要目标是仅根据用户愿意花费的金额而不是实际日期可用性来显示可用日期。日期是无关紧要的,但它们确实需要连续呈现在一个范围内。另外,需要在SQL 2000上工作。我无法解决如何将其拉下来的问题。
示例数据:
date | amount per night
1/1/15 | 12
1/2/15 | 13
1/3/15 | 12
1/4/15 | 5
因此,如果用户输入30,结果将返回如下:
date range | total
1/2/15 - 1/4/15 | 30
1/1/15 - 1/2/15 | 26
1/2/15 - 1/3/15 | 25
1/3/15 - 1/4/15 | 17
答案 0 :(得分:1)
在SQL 2000中,您没有OVER子句,因此WHILE循环是您最好的(仅?)选项。
使用临时表开始为期两天的选项。
set @numdates = 1
select d1.[date] as startdate,
d2.[date] as enddate,
d1.price + d2.price as price,
2 as numdates
into #stays
from dates d1
join dates d2 on d2.date = dateadd(day,1,d1.date)
where d1.price + d2.price <= @cash
现在循环:
while (@@rowcount > 0)
begin
set @numdates = @numdates + 1
insert #stays
select d1.startdate as startdate,
d2.[date] as enddate,
d1.price + d2.price as price,
d1.numdates + 1 as numdates
from #stays d1
join dates d2 on d2.date = dateadd(day,1,d1.enddate)
where d1.price + d2.price <= @cash
and d1.numdates = @numdates
end
或类似的东西。我没有测试过(只在我的手机上输入)