这个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排名。
注意订单表中每一行可能是多个订单
如果愿意帮我解决这个难题,不明白的,我会再仔细叙述一遍的。
万分感谢
订单号 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排名。
注意订单表中每一行可能是多个订单
如果愿意帮我解决这个难题,不明白的,我会再仔细叙述一遍的。
万分感谢
解决方案 »
- 一个多表头的表格,在设计模式是正确的,但一运行就自动在商业字段前增加了空白列。
- javascript 帮助手册
- vs2008 Ajax 的疑难问题,请教高手?
- 求助高手!GridView问题!急!
- 如何把连接的数据库的数据显示到table中--------在线等!!
- 我在table控件增加了一个Button控件,按一下按钮,为什么table中的Button就没了?
- asp.net缓存:页面缓存后页面的按钮后台事件处理机制???
- asp.net将查询数据转换为需要的格式,字符串拼接高手进!
- 如何在asp.net中实现以前在ASP中实现的嵌入IF操作?
- 重庆有asp.net,c#的高手吗?有搞.net技术的公司吗!!
- 初级问题,使用ajaxpro.dll时如何获取前台控件的值
- httpModules权限
id dvdiID avID
1 1 1
2 2 2这里关联的到底是DVD还是订单 ?
如果是DVD的话 直接根据数量排名就可以了如果是订单的话,先根据AV妞的分组 计算订单的总和 然后再排序
------------------------------
订单表 t1 ,dvd和AV关联表 t2
t1 ,t2关联,sum(dvd数量) group t2.avid
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排名。
谢谢!
悬赏分: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张。
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
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
http://zhidao.baidu.com/question/175603516.html
这里看着清晰些!
我把希望寄托在csdn兄弟身上了。。
别让我失望啊。
(
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
select dvdID,sum(dvd数量) as 总数 from 订单表 group by dvdID order by 总数 desc
t2.avid ,sum(t1.dvd_Amount)av_amount 就是该avid 对应的数量了吧,排名就加个order by
也可以参考 13楼,sql server 也有排名分析函数吧,row_number 记得05后就有,rank没有么?
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
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