日期:2014-05-17  浏览次数:20929 次

求一SQL,请教!
问题如下,表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