如何用oracle语句得到如下格式:可能需要点耐心
product(产品表:)
prodid(varchar2) 产品ID 主键
prodname(varchar2) 产品名称
hprice number(10,2)价钱
prodid prodname hrpice
129004 嘉源V300水墨黑 699
orderhist(订单表)
orderid 订单ID 主键
mailid 邮件编号
contactid 联系人ID
result 订单反馈结果 (上述字段均为varchar2类型)
。。。。
orderdet(订单详情表)
orderdetid 订单详情ID
orderid 订单ID(外键)
prodid 产品ID
prodname 产品名称
contactid 订购人ID
upnum(number) 订购个数
uprice(number) 产品原价
orderde(date) 订购日期
。。。。。
phone 电话表
phoneid varchar2 电话ID 主键
contactid varchar2 客户ID
phn1 varchar2 电话区号(可为空)
phn2 varchar2 电话号码 (可为空)
phn3 varchar2 电话扩展号(可为空)
phoneid contactid phn1 phn2 phn3
402312 1001 15876565656
402313 1001 01087654321
一个人可以拥有多个联系方式
未标注的都是varchar2类型
现在要得到如下格式:
品名
嘉园V300水墨黑*1(数量)
select orderhist.crdt as 订购日期,
orderhist.orderid as 订单号,
contact.contactid as 客户编号,
contact.name as 客户姓名,NewFormatPhone(Contact.contactid) as 客户电话, address.zip as 邮编,
fun_getprovincename(orderhist.provinceid) as 省份,
orderhist.prodprice as 货运总额,
orderhist.mailprice as 运费,
orderhist.totalprice as 总金额,
grp.grpname as 组名,
usr.name as 员工姓名,
Fun_GetDDFK(orderhist.result) as 订单反馈,
fun_getcpzt(orderhist.status) as 订单状态,
orderhist.fbdt as 反馈日期,
fun_getpsfs(orderhist.mailtype) as 订购方式,
Fun_GetFKFS(orderhist.paytype) as 付款方式,
decode(orderhist.bill, '1', '需要', '不需要') as 要发票,
address.address as 客户地址,
orderhist.payer as 发票抬头,
topic.dsc as 客户备注,
orderhist.mailid as 邮件编号,
orderhist.note as 订单备注,
orderhist.parcdt as 投递日期
From orderhist, CONTACT, ems, PHONE, Address, Topic, usr, grp
where orderhist.contactid = contact.contactid
and orderhist.spellid = ems.spellid(+)
and phone.phoneid =
(select min(phoneid)
from phone
where phone.contactid = orderhist.getcontactid)
and orderhist.contactid = address.contactid
and topic.contactid(+) = contact.contactid
上面的一段代码得到的效果如下:
订购日期 订单号 客户编号 客户姓名 客户电话 。。。。。。
2009-06-26 17:53:00 54321 10214544 张三 13009876678 027-87656789 。。。。。。。
NewFormatPhone(Contact.contactid) as 客户电话 代码如下:
create or replace function NewFormatPhone(sContactid in phone.contactid%type)
return varchar2 is Result varchar2(2000);
v_Phn1 varchar2(20);
v_Phn2 varchar2(30);
v_phn3 varchar2(30);
v_Phone varchar2(100);
cursor c_Phone is
select decode(phone.phn1,'0','',phone.phn1) || decode
(phone.phn1,'','','0','','-') || phone.phn2 || decode(phone.phn3,'','','0','','-')
|| decode(phone.phn3,'0','',phone.phn3)||decode(phone.phonetypid,'','','')
from phone,(select id,dsc from names where tid='PHONETYP') tPhoneType
where phone.phonetypid=tPhoneType.id(+) and phone.contactid=sContactid;
begin
open c_Phone;
loop
fetch c_Phone into v_Phone;
exit when c_Phone%notfound;
Result := Result || ' ' || v_Phone;
end loop;
close c_Phone;
return(Result);
end NewFormatPhone;
上面只起到一个抛砖引玉的作用,
最后我要得到的结果为:
订购日期 订单号 品名 客户姓名 。。。。。。。
2009-06-25 54333 诺基亚N72黑色*1 诺基亚N79黑色*2 李四 。。。。。。。。
主要就是这个品名这一块,一个订单里可能有多个产品,就和电话有点相似,请各位指点