问题如下,表1:phone(phone_key,phone_num,phone_type,cif_num)
表2:customer(cif_num)
一个客户可以有多种类型的电话,(phone_type=moblie, office, home ...)每一种类型电话就只有一条记录,也就是一个phone_num
现要用一SQL取出对应客户的二个字段:电话号(tel)、传真号(fax)
tel: 按Mobile > office > home的优先级,前面的不为空,则用前面的。
fax: 按office> home的优先级,office fax不为空,则用之,否则用home fax
(都为空则空)
能够用一SQL实现吗?还是得用存储过程?
------解决方案--------------------
其实这个从表设计的角度来考虑的话就很容易,你只要把phone_type定义为number型或char型的,填入数字 0,1,2,3,4等,按照优先级来设定对应mobile,office等
这样select phone_number from (select rownum as rn,phone_num from phone where cif_num= ' ' order by phone_type asc) where rn=1就可以查到tel了
fax类似
如果你的type都为英文moblie等的话,就比较复杂,个人认为应该考虑用行转列实现。
仅作参考
------解决方案--------------------
提示一个思路,你可以尝试一下:
1,表横放,转换成这样个结构:
客户名,Mobile,teloffice,telhome,faxoffice,faxhome
2,用decode函数来得到你想要的tel和fax