其中拍卖系统有
A表。为产品表。列为ID,产品名称,出售数量,低价,然后有N个商品。各个产品的数量不一定。
B表。为拍卖纪录表,列为ID,拍卖价格,
其中。每个产品有N条拍卖纪录。但是。有效的为产品数量。
比如。产品1,这期只出售10个。但是有40个人参与拍卖,只取出价最高的10个人最有效拍卖。B表中,存着所有的拍卖纪录。也有N条。现需求是这样的。我想将所有拍卖的产品的最高价,及有效最低价格(如以上例子。出价最高的第10个为最低的有效价格) 列成一张表CSDN的高手比较多。特来求助
A表。为产品表。列为ID,产品名称,出售数量,低价,然后有N个商品。各个产品的数量不一定。
B表。为拍卖纪录表,列为ID,拍卖价格,
其中。每个产品有N条拍卖纪录。但是。有效的为产品数量。
比如。产品1,这期只出售10个。但是有40个人参与拍卖,只取出价最高的10个人最有效拍卖。B表中,存着所有的拍卖纪录。也有N条。现需求是这样的。我想将所有拍卖的产品的最高价,及有效最低价格(如以上例子。出价最高的第10个为最低的有效价格) 列成一张表CSDN的高手比较多。特来求助
解决方案 »
- 一个复杂查询
- 求一触发语句--在删除某-id前, 将这一id插入到另一个表中
- 请问这个存储过程大概怎么弄呢?如果表A.Key=表B.Key就用表B的记录更新表A,否则将表B的记录插入表A
- 关于两服务器间数据导入的问题
- 关于create database语句的问题????????????
- 看看能有几种方发
- 怎么才可以把2005的库文件转成可以让2000用的文件,高人哪,你在哪里呀!!!
- SQL server不能启动
- 返回值是什么?(来者有分)
- 高手赐教:如何截取文章,使得截取后的段落仍包含某个特定字符串
- 简单的sql语句,大家帮帮忙,万分感谢
- 备份对于服务器“”失败 在“D:\”上写入失败:112(磁盘空间不足)
A表:
ID 产品名称 拍卖数量 底价
1 产品2 3 10B表
ID 姓名 出价
1 张三 20
2 李四 19
3 王五 17
4 赵六 15
5 钱七 10我现在想要的结果是:
产品名称 底价 最高出价 有效最低出价
产品1 10 20 17
底价,
最高出价=(select max(出价) from B),
有效最低出价=(select 出价 from B where id='3')
from A
where 产品名称='产品2'
拍卖很肯能出现重复的价位,那么你这个时候怎么筛选出来5个人呢?
我是按照如果有重复后拍的选出来,你看下吧,有问题在沟通了--> 测试数据:[ta]
IF OBJECT_ID('[ta]') IS NOT NULL DROP TABLE [ta]
GO
CREATE TABLE [ta]([ID] INT,[产品名称] VARCHAR(5),[拍卖数量] INT,[底价] INT)
INSERT [ta]
SELECT 1,'产品1',3,10 UNION ALL
SELECT 2,'产品2',5,25
--------------开始查询--------------------------
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[产品id] INT,[姓名] VARCHAR(4),[出价] INT)
INSERT [tb]
SELECT 1,1,'张三',20 UNION ALL
SELECT 2,1,'李四',19 UNION ALL
SELECT 3,1,'王五',17 UNION ALL
SELECT 4,1,'赵六',15 UNION ALL
SELECT 5,1,'钱七',10 UNION ALL
SELECT 6,2,'张三',30 UNION ALL
SELECT 7,2,'李四',40 UNION ALL
SELECT 8,2,'王五',40 UNION ALL
SELECT 9,2,'赵六',40 UNION ALL
SELECT 10,2,'王五',50 UNION ALL
SELECT 11,2,'李四',50 UNION ALL
SELECT 12,2,'钱七',60
--------------开始查询--------------------------SELECT * FROM
(
SELECT *,(SELECT MAX([出价])FROM tb WHERE [产品id]=a.[id]) AS 最高出价 FROM [ta] AS a
) a
OUTER APPLY(SELECT [ID],[出价] AS 有效最低出价 FROM tb AS b
WHERE [产品id]=a.[id]
AND (SELECT COUNT(*)+1 FROM [tb] WHERE [产品id]=b.[产品id] AND [出价]>b.[出价] OR([出价]=b.[出价] AND id>b.id))=a.[拍卖数量]
) b----------------结果----------------------------
/*
1 产品1 3 10 20 3 17
2 产品2 5 25 60 8 40
*/
我之前弄了在贴上说明。B表的ID就是A表的ID。不是主键。不好意思。还有B表应该有个拍卖的当前时间。,如果有一样的价格。则取最先拍卖的那个人为先。
SELECT * FROM
(
SELECT *,(SELECT MAX([出价])FROM tb WHERE [产品id]=a.[id]) AS 最高出价 FROM [ta] AS a
) a
OUTER APPLY(SELECT id,拍卖时间,[出价] AS 有效最低出价 FROM tb AS b
WHERE [产品id]=a.[id]
AND (SELECT COUNT(*)+1 FROM [tb] WHERE [产品id]=b.[产品id] AND [出价]>b.[出价] OR([出价]=b.[出价] AND 拍卖时间<b.拍卖时间))=a.[拍卖数量]
) b