其中拍卖系统有
A表。为产品表。列为ID,产品名称,出售数量,低价,然后有N个商品。各个产品的数量不一定。
B表。为拍卖纪录表,列为ID,拍卖价格,
其中。每个产品有N条拍卖纪录。但是。有效的为产品数量。
比如。产品1,这期只出售10个。但是有40个人参与拍卖,只取出价最高的10个人最有效拍卖。B表中,存着所有的拍卖纪录。也有N条。现需求是这样的。我想将所有拍卖的产品的最高价,及有效最低价格(如以上例子。出价最高的第10个为最低的有效价格) 列成一张表CSDN的高手比较多。特来求助

解决方案 »

  1.   

    如。
    A表:
    ID 产品名称    拍卖数量  底价
    1   产品2      3          10B表
    ID   姓名   出价
    1    张三   20
    2    李四   19
    3    王五   17
    4    赵六   15
    5    钱七   10我现在想要的结果是:
    产品名称  底价  最高出价   有效最低出价
    产品1     10    20         17
      

  2.   

    你的A表和B表怎么关联的,比如A多个产品,B表怎么关联拍卖的是A的哪个产品
      

  3.   

    忘了说明了。A表的ID就是B表的ID。不好意思
      

  4.   

    select 产品名称,
           底价,
          最高出价=(select max(出价) from B),
          有效最低出价=(select 出价 from B where id='3')
    from  A
    where 产品名称='产品2'
      

  5.   

    你给的数据有点问题啊,b的id 应该是唯一的,一条记录一个
    拍卖很肯能出现重复的价位,那么你这个时候怎么筛选出来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
    */
      

  6.   


    我之前弄了在贴上说明。B表的ID就是A表的ID。不是主键。不好意思。还有B表应该有个拍卖的当前时间。,如果有一样的价格。则取最先拍卖的那个人为先。
      

  7.   

    取最先的那我的语句你稍微改一下
    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
      

  8.   

    SELECT COUNT(*)+1 FROM [tb] WHERE [产品id]=b.[产品id] AND [出价]>b.[出价] OR([出价]=b.[出价] AND 拍卖时间<b.拍卖时间))=a.[拍卖数量]这一点我看不太明白。不知道是什么意思呢?