首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求1SQL,给跪了

2013-09-09 
求一SQL,给跪了如上图,分别为A、B表希望获取如下结果:文字说明:A表:价格规则表 (每种房型在某天的价格规则

求一SQL,给跪了
求1SQL,给跪了
如上图,分别为A、B表

希望获取如下结果:
求1SQL,给跪了

文字说明:
A表:价格规则表 (每种房型在某天的价格规则表)
B表:房价表     (每种房型每天的原始价格)

他们的房型Code都是一样。
现在需要按照房型以及他们的日期来计算销售价格。

A中的EffectiveDate对应B中的RoomDate。
可以看出:
B在20130913、20130914两天,用的是A中20130913的价格规则。
B在20130915那天,用的是A中20130915那天的价格规则。
B在20130916那天,用的是A中20130916那天的价格规则

如果某天价格规则没有设置,那么按照它前面的那个(那个规则)计算。

[解决办法]

select B.PMSRoomTypeCode,B.PMSRoomTypeName,B.RoomDate,B.price
,PriceRule=(select top 1 PriceRule from A 
where A.PMSRoomTypeCode=B.PMSRoomTypeCode and A.EffectiveDate<=B.RoomDate order by A.EffectiveDate desc) 
,PayAmount=(select top 1 PayAmount from A 
where A.PMSRoomTypeCode=B.PMSRoomTypeCode and A.EffectiveDate<=B.RoomDate order by A.EffectiveDate desc)
,B.PriceRuleType 
from B

[解决办法]
瞧标题,不用跪啊,提出问题就行了,这里的人很热心的,一样会给解答的
[解决办法]
SELECT
b.*, t.PriceRule, t.PayAmount, t.PriceRuleType
FROM B表 b
OUTER APPLY
(
SELECT TOP(1) PriceRule, PayAmount, PriceRuleType
FROM A表 a
WHERE a.RoomTypeCode = b.PMSRoomTypeCode
AND a.EffectiveDate <= b.RoomDate
ORDER BY a.EffectiveDate DESC
) t

[解决办法]

select b.PMSRoomTypeCode,b.PMSRoomTypeName,b.RoomDate,b.Price,
       a.PriceRule,a.PayAmount,a.PriceRuleType
 from B表 b
 cross apply
 (select top 1 * from A表 a
   where b.PMSRoomTypeCode=a.RoomTypeCode 
   and cast(b.RoomDate as date)>=cast(a.EffectiveDate as date)
   order by cast(a.EffectiveDate as date) desc) a



[解决办法]
1楼回答的比较好,
[解决办法]
这很好弄的,在SQL Server里有个试图,你把2张表都拖进去,然后弄个链接,想查询哪一列就在前面得checkbox里打个对号就行。
[解决办法]
赞同一楼的做法。
[解决办法]
我赞同一楼和四楼的做法

热点排行