请教一个两表关联判断的SQL语句

bluesky1980 2005-11-17 03:40:17
两个表
table A (tel_no,info,num) ; table B (area,tel_area)
A B
tel_no info num area tel_area
61234567 wang 1 西城 6123
61235467 yang 2 西城 61245
61245555 li 3 东城 6789
67894321 li 2 东城 6786
67866666 wang 1
67895555 li 5

我想找出每个区的号码个数及NUM总数
逻辑:B表中的tel_area与A表中的tel_no前四(五)位关联,即:通过比较
A表中的tel_no前四(五)位与B表中的tel_area字段来决定A表中该号码属于哪个区
注:若B表中的tel_area出现五位,则该五位的前四位就不会出现在B表中,如:存在 “西城 61245”这条记录
就不会有“西城 6124”这条记录.

由上述测试数据想得到如下结果:
area count total_num
西城 3 6(1+2+3得出的)
东城 3 8(2+1+5得出的)
...全文
146 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesky1980 2005-11-18
  • 打赏
  • 举报
回复
KingSunSha(弱水三千)方法OK
也谢谢sbaz(万神渡劫)
KingSunSha 2005-11-18
  • 打赏
  • 举报
回复
SELECT b.area, COUNT (*), SUM (num)
FROM a, b
WHERE a.tel_no LIKE b.tel_no || '%'
GROUP BY b.tel_area;
xmankevin1980xman 2005-11-17
  • 打赏
  • 举报
回复
那你就装ORACLE9或10吧。:)
超叔csdn 2005-11-17
  • 打赏
  • 举报
回复
我也不清楚.试试
select b.area,sum(case when (b.tel_area=substr(a.tel_no,1,4) or b.tel_area=substr(a.tel_no,1,5)) then 1 else 0 end) cout,sum(case when (b.tel_area=substr(a.tel_no,1,4) or b.tel_area=substr(a.tel_no,1,5)) then num else 0 end) total_num
from a,b
group by b.area
bluesky1980 2005-11-17
  • 打赏
  • 举报
回复
我的ORACLE是7
所以不支持CASE WHEN
大家还有别的方法吗?
bluesky1980 2005-11-17
  • 打赏
  • 举报
回复
报错:少右括号
可是我觉得不少啊
超叔csdn 2005-11-17
  • 打赏
  • 举报
回复
select b.area,sum(case when b.tel_area=substr(a.tel_no,1,4) or b.tel_area=substr(a.tel_no,1,5) then 1 else 0 end) cout,sum(case when b.tel_area=substr(a.tel_no,1,4) or b.tel_area=substr(a.tel_no,1,5) then num else 0 end) total_num
from a,b
group by b.area
超叔csdn 2005-11-17
  • 打赏
  • 举报
回复
select b.area,sum(case when b.tel_area=substr(a.tel_no,1,4) or b.tel_area=substr(a.tel_no,1,5) then 1 else 0 end) cout,sum(case when b.tel_area=substr(a.tel_no,1,4) or b.tel_area=substr(a.tel_no,1,5) then num else 0 end) total_num
from a,b
group by c.

17,381

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧