这个sql语句如何写,谢谢!订单表
订单号   dvdID   dvd数量   
123            1            2
123            2            2
234            2            4dvd明细表
dvdID        单价
1               100
2                200女演员表
AVid            AVName
1                   name1
2                   name2dvd和AV关联表
id       dvdiID           avID
1          1                   1
2          2                   2现在要求的是根据DVD卖出的数量,求得AV排名。
注意订单表中每一行可能是多个订单
如果愿意帮我解决这个难题,不明白的,我会再仔细叙述一遍的。
万分感谢

解决方案 »

  1.   

    dvd和AV关联表
    id dvdiID avID
    1 1 1
    2 2 2这里关联的到底是DVD还是订单 ?
    如果是DVD的话  直接根据数量排名就可以了如果是订单的话,先根据AV妞的分组  计算订单的总和  然后再排序
      

  2.   

    这个是dvd和av的关联啊。。不是订单。。但是订单表,每行不一定是一个订单,也许一个订单订了两个dvd,其中一个dvd是2张,另一个是3张。那么就是两行,但是订单id是一样的。所以订单表要分组的。分组之后乘以数量。
      

  3.   

    根据DVD卖出的数量,求得AV排名  
    ------------------------------
    订单表 t1 ,dvd和AV关联表 t2
    t1 ,t2关联,sum(dvd数量) group t2.avid 
      

  4.   

    先select 表,在根据分组排序就可以了
      

  5.   

    我再仔细叙述一次!
    TB_AV表            --AV明细表
    idindex(pk)         AVName
    1                         山本
    2                         香山
    CDDetail表          --dvd明细表
    ididex (pk)             singleprice
    1                             100
    2                              200
    CDDetail_AV_Item表    --dvd和av关联表
    id      dvdid        avid
    1         1              1
    2          2             2
    3          2             1
    注意:dvdid是2没有错误,也就是说此dvd是由id为1,2的两个女演员演得。最终目标:根据dvd卖出的数量,求得av排名。
    谢谢!
      

  6.   

    这个sql如何写,有点难度!涉及4个表。
     悬赏分:0 - 离问题结束还有 14 天 23 小时 
    TB_AV表            --AV明细表
    idindex(pk)         AVName
    1                         山本
    2                         香山
    CDDetail表          --dvd明细表
    ididex (pk)             singleprice
    1                             100
    2                              200
    CDDetail_AV_Item表    --dvd和av关联表
    id      dvdid        avid
    1         1              1
    2          2             2
    3          2             1
    注意:dvdid是2没有错误,也就是说此dvd是由id为1,2的两个女演员演得。最终目标:根据dvd卖出的数量,求得av排名。
    谢谢!Order_Item表
    ididex (pk)           OrderID        CDD_ididex          SendNum
    1                             123              1                             2
    2                              369              2                            5
    3                              369              1                             1
    注意:订单号两个369是正确的,也就是说,这比订单订了两张dvd,其中id为1的dvd订了1张,id为2的dvd订了5张。
      

  7.   

    with t1 as (
    select 123 OrderNO , 1 dvdID, 2 dvd_Amount from dual
    union all 
    select 123 OrderNO , 2 dvdID, 2 dvd_Amount from dual
    union all 
    select 234 OrderNO , 2 dvdID, 4 dvd_Amount from dual
    union all 
    select 234 OrderNO , 3 dvdID, 4 dvd_Amount from dual
    ),
    t2 as

    select 1 id , 1 dvdID, 1 avid from dual
    union all
    select 2 id , 2 dvdID, 2 avid from dual
    union all
    select 3 id , 3 dvdID, 2 avid from dual
    )
    select t2.avid ,sum(t1.dvd_Amount)av_amount from t1,t2 where t1.dvdid = t2.dvdid group by t2.avid
      

  8.   

    看着AV的份,给你写个,没有测试。select a.dvdid,a.数量,b.价格,c.演员 
    Rank() over(PARTITION BY c.女演员表 order by a.数量) as RANK
    from 订单表 a
    left outer join 明细表 b on a.dvdid=b.dvdid
    left outer join 女演员表 c on c.avid=d.avid 
    left outer join dvd和AV关联表 d on a.dvdid=d.avid
      

  9.   

    对了,是sql server,不是orcal!
      

  10.   

    SQL 好难啊啊   
      

  11.   

    兄弟们,
    http://zhidao.baidu.com/question/175603516.html
    这里看着清晰些!
    我把希望寄托在csdn兄弟身上了。。
    别让我失望啊。
      

  12.   

    AV大研发,等待ing 表设计的麻烦,
      

  13.   

    select table2.*,女演员表.avname
    (
    select table1.*,dvd和AV关联表.avid
    (select dvdID,sum(dvd数量) as 总数 from 订单表 group by dvdID order by 总数 desc) as table1 left join dvd和AV关联表 on table1.dvdID=dvd和AV关联表.dvdid
    ) as table2 left join 女演员表
    on 女演员表.avid = table2.avid
      

  14.   

    楼上的写法,值得期待。。最关键的group order by出现了。。
    select dvdID,sum(dvd数量) as 总数 from 订单表 group by dvdID order by 总数 desc
      

  15.   

    不对么?
    t2.avid ,sum(t1.dvd_Amount)av_amount 就是该avid 对应的数量了吧,排名就加个order by
    也可以参考 13楼,sql server 也有排名分析函数吧,row_number 记得05后就有,rank没有么?
      

  16.   

    declare @订单表 table(订单号 int, dvdID int, dvd数量 int)  
    insert into @订单表 
    select 123,1,2
    union
    select 123,2,2
    union
    select 234,2,4
    union 
    select 234,2,12
    union 
    select 123,3,5
    ;declare @明细表 table(dvdID int,单价 decimal)
    insert into @明细表
    select 1,100
    union
    select 2,200;declare @女演员表 table(AVid int,AVName varchar(50))
    insert into @女演员表
    select 1 ,'name1'
    union
    select 2 ,'name2';
    declare @dvd和AV关联表 table(id int, dvdiID int, avID int)
    insert into @dvd和AV关联表
    select 1, 1, 1
    union
    select 2, 2 ,2
    select a.dvdid,
    a.dvd数量,
    b.单价,
    c.AVName
    from (select sum(dvd数量) dvd数量,dvdID from @订单表 group by dvdID
    ) a
    left outer join @明细表 b on a.dvdid=b.dvdid
    left outer join @dvd和AV关联表 d on a.dvdid=d.dvdiID
    left outer join @女演员表 c on c.AVid=d.avID
    order by a.dvd数量 desc结果
    --------------------
    2 18 200 name2
    3 5 NULL NULL
    1 2 100 name1
      

  17.   

    谢谢兄弟们,是用三个表就可以了,问题已经解决了。。当然在各位的帮助下,结贴了!正确写法:
    SELECT TOP 10 t2.*,TB_AV.AVName FROM  
    (SELECT AVID,SUM(total) as total FROM  
    (SELECT CDD_ididex,SUM(SendNum) as total FROM Order_Item GROUP BY CDD_ididex) as t1 LEFT JOIN CDDetail_AV_Item  
    ON t1.CDD_ididex=CDDetail_AV_Item.dvdid GROUP BY AVID ) AS t2 RIGHT JOIN TB_AV on t2.avid=TB_AV.idindex ORDER BY t2.total DESC