求一个句子,在线等,是在无分可给了,求大家帮忙,急急急~~~~~~~~~~~~
三个表,一个是客户名录a,一个是产品名录b,一个是每个客户的各种产品报价的表格c。(每个客户的每个产品价格可能不同)
结构如下:
a
cusid
cusname 客户名
b
prdid
prdprice 产品公布价
prdname 产品名称
c
pid
pcusid 与a.cusid关联
pprdid 与b.prdid关联
pprice 某个客户的某个产品的供货价
希望实现如下的列表,如何写句子阿
客户名 产品1 产品2 产品3 产品4
张三 100 200 300 400
里斯 110 220 330 440
王二 120 230 350 550
我首先用语言生成一个所有产品的列
sql= "select cusname, "
do while not rs.eof
sql=sql& " case when (cusid=pcusid and prdid=pprdid) pprice else prdprice end as price "&rs( "prdid ")& ", "
rs.movenext
loop
然后
sql=sql& "from l_customer,l_product,l_price where prdid=pprdid and cusid=pcusid "
成成了一个如下的句子
select cusname,case when (cusid=pcusid and prdid=pprdid) then pprice else prdprice end as
price1, case when (cusid=pcusid and prdid=pprdid) then pprice else prdprice end as price2
from l_customer,l_product,l_price where prdid=pprdid and cusid=pcusid
可是却实现不了我需要的列表。
另外,这个列表的一个要求是,如果在c表中没找到某个客户的某个产品的报价,则用b表中的这个产品的价格(b.prdprice) 来代替
------解决方案--------------------
--C表中 "王二 "的價格全部刪除
-- "里斯 ", "王二 " 産品3的價格是從B表取的
create table A(cusid int, cusname nvarchar(10))
insert A select 1, '张三 '
insert A select 2, '里斯 '
insert A select 3, '王二 '
create table B(prdid int, prdprice int, prdname nvarchar(10))
insert B select 1, NULL, '产品1 '
insert B select 2, NULL, '产品2 '
insert B select 3, 330, '产品3 '
insert B select 4, NULL, '产品4 '
create table C(pid int, pcusid int, pprdid int, pprice int)
insert C select 1, 1, 1, 100
insert C select 2, 1, 2, 200
insert C select 3, 1, 3, 300
insert C select 4, 1, 4, 400
insert C select 5, 2, 1, 110
insert C select 6, 2, 2, 220
insert C select 7, 2, 4, 440
declare @sql varchar(8000)
set @sql= 'select A.cusid, A.cusname, '
select @[email protected]+quotename(prdname)
+ '=isnull(max(case when pprdid= '+quotename(prdid, ' ' ' ')+ ' then pprice end), '+rtrim(isnull(prdprice, 0))+ '), ' from B
select @sql=left(@sql, len(@sql)-1),
@[email protected]+ ' from A
left join C on C.pcusid=A.cusid