当前位置: 代码迷 >> Sql Server >> 句子,是在无分可给了,求大家帮忙
  详细解决方案

句子,是在无分可给了,求大家帮忙

热度:236   发布时间:2016-04-27 21:54:39.0
求一个句子,在线等,是在无分可给了,求大家帮忙
求一个句子,在线等,是在无分可给了,求大家帮忙,急急急~~~~~~~~~~~~

三个表,一个是客户名录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
  相关解决方案