求救!!!

qinggeshou 2012-08-31 12:59:29
小弟求救个存储过程,要求是这样的:关于买东西的,有2个表:buy和ItemTable,buy是指的一次购物的记录,item是指的购物的项目记录,一次购物可以包含多个item,现在要求把一段时间内购物金额最多的顾客的top查询出来,我只能完成某个特定的用户的一段时间内的所有购物的每次记录,没办法查询出所有顾客的分组,并累加其金额并排序,其中某个特定的用户的一段时间内的所有购物的每次记录的查询为:
select buyid,Clientid,buy_cost from buy where buydate BETWEEN '2009-8-1' AND '2012-8-31' and (parent_Item_id IN (SELECT item_id FROM ItemTable WHERE buyid in(select buyid from buy where clientid=246 and buydate BETWEEN '2009-8-1' AND '2012-8-31')))
请高手写个存储过程,取出某段时间购物的查询出所有顾客的分组,并累加其金额并排序。要求一个存储过程,谢谢啊!!!!!万分感谢救命!
...全文
82 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinggeshou 2012-08-31
  • 打赏
  • 举报
回复
没人回了,自己顶下
qinggeshou 2012-08-31
  • 打赏
  • 举报
回复
怎么在存储过程里把现在查询出来的记录的id去逐去buy表去查询属于哪次大采购,然后把所有属于一次大采购的金额加起来?存储过程里面没有for语句那样的东西,我不会,请帮帮我,给点示范的类似的例子,也行
qinggeshou 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
结果为
Clientid totalcost
2 200
1 150?
不会吧,这个是你想要的?

SQL code


IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'buy')
BEGIN
DROP TABLE buy
END
GO
CREATE TABLE buy
(
buyid INT,
……
[/Quote]
对不起,我彻底搞错了,应该是这样的:
购物分三层。大采购,中间商代购,具体购物Item,其中一次大采购可以包含多个中间商的多次代购,我们是其中一个中间商,我的select buyid,Clientid,buy_cost from buy where buydate BETWEEN '2009-8-1' AND '2012-8-31' and (parent_Item_id IN (SELECT item_id FROM ItemTable WHERE buyid in(select buyid from buy where clientid=246 and buydate BETWEEN '2009-8-1' AND '2012-8-31')))是找出了所有的由我们代理的中间代购在一段时间(2009-8-1到2012-8-31 )内的记录,然后还要把这些记录的id去buy表去查询属于哪次大采购(根据parent_Item_id查询,如果parent_Item_id是大采购的ID,就是属于这次大采购的),然后把我们在各个大采购中所占的金额从大到小排列。
孤独加百列 2012-08-31
  • 打赏
  • 举报
回复
结果为
Clientid totalcost
2 200
1 150?
不会吧,这个是你想要的?

IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'buy')
BEGIN
DROP TABLE buy
END
GO
CREATE TABLE buy
(
buyid INT,
Clientid INT,
buy_cost INT
)
GO
INSERT INTO buy
SELECT 1, 1, 100 UNION
SELECT 2, 1, 50 UNION
SELECT 3, 2, 200
GO
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'ItemTable')
BEGIN
DROP TABLE ItemTable
END
GO
CREATE TABLE ItemTable
(
item_id INT,
buyid INT
)
GO
INSERT INTO ItemTable
SELECT 1, 1 UNION
SELECT 2, 1 UNION
SELECT 3, 1 UNION
SELECT 4, 2 UNION
SELECT 5, 3
GO
/*
Clientid totalcost
2 200
1 150
*/

SELECT Clientid,SUM(buy_cost) AS totalcost
FROM buy
GROUP BY Clientid

Clientid totalcost
1 150
2 200
qinggeshou 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
你的需求也不用存储过程,给出表结构和数据,你想要的结果。
[/Quote]
表buy:buyid,Clientid,buy_cost(每次购买的总金额),parent_Item_id(这次采购可能是另外一次大采购的子项目)

表ItemTable:item_id,buyid(item属于哪次buy)
数据如下
buy:
buyid Clientid buy_cost
1 1 100
2 1 50
3 2 200
ItemTable:
item_id buyid
1 1
2 1
3 1
4 2
5 3
结果为
Clientid totalcost
2 200
1 150
孤独加百列 2012-08-31
  • 打赏
  • 举报
回复
你的需求也不用存储过程,给出表结构和数据,你想要的结果。
qinggeshou 2012-08-31
  • 打赏
  • 举报
回复
如果可能的话,写个语句也行啊
qinggeshou 2012-08-31
  • 打赏
  • 举报
回复
没人帮忙啊,高手救命啊

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧