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

求段SQL
其中拍卖系统有
A表。为产品表。列为ID,产品名称,出售数量,低价,然后有N个商品。各个产品的数量不一定。
B表。为拍卖纪录表,列为ID,拍卖价格,拍卖时间, ID与A表的ID是对应的。

其中。每个产品有N条拍卖纪录。但是。有效的为产品数量。
比如。产品1,这期只出售10个。但是有40个人参与拍卖,只取出价最高的10个人最有效拍卖。

B表中,存着所有的拍卖纪录。也有N条。

现需求是这样的。

我想将所有拍卖的产品的最高价,及有效最低价格(如以上例子。出价最高的第10个为最低的有效价格) 列成一张表

如。
A表:
ID 产品名称 拍卖数量 底价
1 产品2 3 10

B表
ID 姓名 出价
1 张三 20
1 李四 19
1 王五 17
1 赵六 15
1 钱七 10

我现在想要的结果是:
产品名称 底价 最高出价 有效最低出价
产品1 10 20 17

------解决方案--------------------
SQL code

create table A(
id int,
产品名称 varchar(10),
拍卖数量 int,
底价 int
)
insert into A
select 1 ,'产品2', 3, 10


create table B(
id int,
姓名 varchar(20),
出价 int
)
insert into B
      select 1 ,'张三', 20
union select 1 ,'李四', 19
union select 1, '王五', 17
union select 1 ,'赵六', 15
union select 1 ,'钱七' ,13

select * from A


select * from B

with T as(
select a.产品名称,a.底价 ,b.出价,ROW_NUMBER() over(order by b.出价 desc)as max_p,ROW_NUMBER() over(order by b.出价 asc)as min_p from A a join B b on a.id=b.id
where b.出价>=a.底价
group by a.产品名称,a.底价,b.出价)
select a.产品名称,a.底价, a.出价 as 最高出价,B.出价  as 有效最低出价 from T a,T b
where  a.max_p=1 and b.min_p=1 and a.产品名称=b.产品名称 and B.出价>=a.底价

//执行结果
产品名称    底价    最高出价    有效最低出价
产品2    10    20    13