日期:2014-05-18  浏览次数:20456 次

高手请进!! 连接查询难题
表A
time           number                   duration
11:23         8610114                   3          
11:25         862153167855         10
12:13         8613511111111       3
11:55:       85299998888           7
...             .....

表B
description             country_code       area_code     price
  中国北京                     86                         10                   0.1
  中国上海                     86                         21
  中国其他                     86                                               0.2
  香港手机                     852                       9                     1.5
  香港其他                     852                                             1  
    ....                           ....                     ...                 ....
根据表A中number   中的   country_cde     和are_code,   找到相应费率,   按description   分类统计出每个地区的总费用,
本人解决如下:   select   b.description   ,sum(a.duraion*b.price)   from   A   join   B
on   a.number   like   b.country_code+b.area_code+ '% '
但出现一个问题是   例如   数据8610114   在 '中国北京 '中被累加过,同时在 '中国其它 '中
又被加了一遍,因为它同时满足   '8610% '   和   '86% '   希望A中的数据,只根据B表统计一次,谢谢!


------解决方案--------------------
可以這樣

Select b.description ,sum(a.duration*b.price) As total from A join B
on a.number like b.country_code+b.area_code+ '% '
Where [description] Not Like '% ' + N '其他 '
Group By b.description
Union
Select b.description ,sum(a.duration*b.price) As total from A join B
on a.number like b.country_code + '% '
Where [description] Like '% ' + N '其他 '
And Not Exists (Select [description] From B T Where A.number Like country_code + area_code + '% ' And [description] Not Like '% ' + N '其他 ')
Group By b.description
------解决方案--------------------
设计有问题
用其他判断不太牢靠
看看另一贴http://community.csdn.net/Expert/topic/5595/5595161.xml?temp=.4671289