首页 新闻 会员 周边

比较复杂的关系,求sql,写了两天,感觉都对了,实际跑起来都错了.

1
悬赏园豆:5 [已解决问题] 解决于 2011-12-16 09:21

表的结构如上.

业务是多种支付通道结算比例的构造.

tsys_channel 代表的是系统通道表(一些通道的配置信息)

tsys_channel_Ext 代表系统通道扩展表(对应通道的扩展信息)

tosm_channel代表一些商户的通道特殊结算比例

tosm_storeinfo代表商户信息

 

简要说一下表结构(只写出会参与的列):

tsys_channel(系统通道信息)

ID 主键

ChannelName 通道名称

Status  通道开通状态

 

Tsys_channel_ext(系统通道扩展表)

ID 主键,外键关联Tsys_channel的ID

Percentage 该通道结算比例

Status 该通道开启状态

Lenvel 该通道对应商家等级和Tosm_StoreInfo_Lenvel

 

Tosm_channel(商户特殊通道)

ID 外键关联Tsys_channel的ID

SID 外键关联tosm_storeinfo的ID

Percentage 该商户通道结算比例(特殊的,与范围的不同,属于个例)

Status 该商户持有通道开启情况

 

Tosm_storeinfo(商户信息)

ID 商户ID,主键

Storename 商户名称

Lenvel 商户等级(三个等级,普通,高级,钻石级)

这些参数存在一个覆盖关系.

 

首先,通道分等级,等级的体现就在tsys_channel_ext表里面完成的.等级对应tosm_storeinfo_lenvel

每个商户在一个等级里面,他的提成就应该对应到相应的通道比例

但是某个别商户可能有特殊关系,某个别通道价格高点,但是他还是属于他所在的级别,

这个时候就要用到tosm_channel,添加该商户的特殊通道比例.

 

通道存在一个覆盖关系.比如tosm_channel会覆盖tsys_channel_ext的status

 

 

目前的需求就是写几条sql

1.输入某个商家名或者商家ID,查询该商家的有效通道列表.

2.输入某个商家名或者商家ID,通道名或者通道ID,查询商家该通道的详细信息.

3.直接查询系统通道(包含扩展信息),并且按照等级排序.

graymaster的主页 graymaster | 初学一级 | 园豆:7
提问于:2011-10-25 00:20
< >
分享
最佳答案
0

 if   exists(select   1   from   tsys_channel as a,Tosm_channel as b,Tosm_storeinfo as c,  where  a.ID=b.ID and b.SID=c.ID and b.Status="开启" and a.Status=="开启")  
  select   a.ID as 'ID',b.SID as '商户id',a.ChannelName as '通道名',b.Percentage  as '比例'   from   tsys_channel as a,Tosm_channel as b,Tosm_storeinfo as c,  where  a.ID=b.ID and b.SID=c.ID  and b.Status="开启" and a.Status=="开启"

else
  select   a.ID as 'ID',b.SID as '商户id',a.ChannelName as '通道名',b.Percentage  as '比例'   from   tsys_channel as a,Tsys_channel_ext as b,Tosm_storeinfo as c,  where  a.ID=b.ID and b.SID=c.ID and c.Lenvel=b.Lenvel and b.Status="开启" and a.Status=="开启"

 

思路 首先先判断客户是否有有效的特殊通道    有查询出来  没有则按正常路径查询

第一步 排出通道扩展表的影响 操作 ,思路就清晰一些

第二步  排出特殊通道操作

收获园豆:5
风云轩海 | 菜鸟二级 |园豆:210 | 2011-10-25 09:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册