请教SQL高人

来源:百度知道 编辑:UC知道 时间:2024/04/29 03:20:02
1、有一张表:data_event
产品编号 用户账号 计费时长 费用
51567166 089865323008 5400 0
35917846 adsl66225858 3132 0
34807360 adslfsl28951 252 21
35793122 adslwdp1969 180 5
35928204 adsl7470 1512 126
这张表是用户上网的批价清单表,宽带用户每次拨号上网后的按时长收费的计费表。时长单位为:秒,费用单位为:分
1、有另外一张表:宽带套餐
产品编号 套餐类型
51567166 30元/120小时,超出1元/小时,50元封顶

现在要根据清单表中的每个用户的产品编号关联套餐表找到相应的宽带套餐,然后判断每条话单是否要收费。如果在包时范围内那么就不收费,费用字段就为0;如果某条话单超出了包时范围就要按超出标准进行收费。
现在我怎么判断每条话单是否应该收费,应该收费的话费用是否正确?
回答 simenyu:
1 是每个用户每次上网都会产生一条新的记录到data_event
2 每个用户对应多个产品编号,但现在只按产品编号和用户账号唯一对应来处理
3 宽带套餐表可以随意增删字段。

如果套餐种类不太多的话,那么就建议逐个套餐种类计算费用,拿套餐51567166举例:
update data_event
set 费用=
case when 计费时长<=432000 then 0
when 计费时长>432000 and 计费时长<=612000 then (计费时长-432000)/3600*100
else 5000
end
where 产品编号=51567166

补充,有几个问题需要确认一下:
1.是否是用户每次拨号上网都产生一条新的记录到data_event表中?
2.每个用户只对应一个产品编号还是一个用户有可能对应多个产品编号?
(换句话说,就是是否存在一个用户同时拥有多个套餐类型?)
3."宽带套餐"表能新增字段吗?以目前它的字段是无法由电脑提取关键数据的,只能靠人工来理解并提取关键数据.

鉴于完整的方案过于复杂,我仅对用户089865323008的套餐51567166进行了费用计算,为了观看计算的结果,我新增了以下几条记录,并假设这些记录都发生在同一个月份.
USE DemoDB;
GO
IF OBJECT_ID('DATA_EVENT','U') IS NOT NULL
DROP TABLE DATA_EVENT;
GO
CREATE TABLE data_event (产品编号 int,用户账户 varchar(30),计费时长 int,费用 money);
insert data_event (产品编号 ,用户账户 ,计费时长 ,费用)
values (51567166,'089865323008',5400,0),
(51567166,'089865323008',202000,0),
(51567166,'089865323008',232000,0),
(51567166,'089865323008',300000,0