首页新闻找找看学习计划

sqlserver游标循环中怎么得到一张表一列数据的总和

0
悬赏园豆:5 [已关闭问题] 关闭于 2016-02-04 12:43

我有一张表,order表吧 他有一个字段price 现在我用游标循环,对每一条的price都有一个操作,怎么得到这个price的总和?  

问题补充:

是这样 我要用游标去循环,每一条游标的这列数据都会进行一个乘积运算,我是要得到这列数据乘积运算的总和

SH一03的主页 SH一03 | 初学一级 | 园豆:185
提问于:2016-02-03 15:57
< >
分享
所有回答(4)
0

select sum(price) from order

刘宏玺 | 园豆:14004 (专家六级) | 2016-02-03 16:06

可能我问的不太清楚,这个price要乘以一个折扣,所有的折扣额相加不能大于一个数值,最后做更新操作

现在怎么得到这个总数不太清楚

 

支持(0) 反对(0) SH一03 | 园豆:185 (初学一级) | 2016-02-03 16:13

@SH一03: 在游标外面定义一个变量,这不是很简单么

支持(0) 反对(0) 刘宏玺 | 园豆:14004 (专家六级) | 2016-02-03 16:18

@刘宏玺: 嗯,我定义了一个变量 但怎么在游标中得到累加值啊 用+=好像不对

支持(0) 反对(0) SH一03 | 园豆:185 (初学一级) | 2016-02-03 16:23

@SH一03: 变量 = 变量 + 值

支持(0) 反对(0) 刘宏玺 | 园豆:14004 (专家六级) | 2016-02-03 16:47
0

你都知道游标了,搜索一下一大堆的励志、栗子和梨子。我弄一段示例代码给你参考,

你自己修改成自己要的吧。

declare OrderCursor cursor
        for Select OrderDetailID, ProductID, OrderQuantity-DeliverQuantity, StockQuantity
            from OrderTable
        
open OrderCursor

fetch next from OrderCursor 
        into @OrderDetailID, @CurrentProductID, @UndeliverQuantity, @StockQuantity

while @@FETCH_STATUS =0
Begin
    ---- here you can use  @OrderDetailID, @CurrentProductID, @UndeliverQuantity, @StockQuantity to calculate.
    ---- it is the result of each row value.

    fetch next from OrderCursor 
                into @OrderDetailID, @CurrentProductID, @UndeliverQuantity, @StockQuantity

end
爱编程的大叔 | 园豆:29818 (高人七级) | 2016-02-03 16:29

ALTER PROCEDURE [dbo].[pro_buy]
-- Add the parameters for the stored procedure here
AS
BEGIN
DECLARE @uid INT --客户id
DECLARE @id int --声明一个用来接收顾客id的变量
DECLARE @g_id int --声明一个用来接收商品id的变量
DECLARE @gid INT --商品id
DECLARE @price MONEY --商品单价
DECLARE @minprice MONEY --区分计算后的商品单价
DECLARE @gnumber INT --商品数量
DECLARE @gname VARCHAR(20) --商品名
DECLARE @amount MONEY --总金额
DECLARE @salesdate DATE --日期
DECLARE @disNum INT --区分标识
DECLARE @dispercent FLOAT --折扣率
DECLARE @discount MONEY --最大折扣金额
DECLARE @rowDiscount MONEY --单件商品折扣额
DECLARE @discountMoney MONEY --商品折扣总金额
DECLARE @disMoney MONEY --剩余折扣额
DECLARE dis_orderCursor CURSOR --定义一个外部游标用来根据客户不同区分
FOR
SELECT
[UID] ,
gid ,
MAX(gname) AS gname,
SUM(gnumber) AS gnumber,
MIN(price) AS price,
SUM(amount) AS amount,
MIN(salesdate) AS salesdate
FROM
dbo.[order]
GROUP BY
[UID] ,
gid
ORDER BY
[UID],
gid
OPEN dis_orderCursor --打开游标
FETCH NEXT FROM dis_orderCursor INTO @uid,@gid,@gname,@gnumber,@price,@amount,@salesdate
WHILE @@FETCH_STATUS =0 --循环读取
BEGIN
INSERT INTO
dbo.[buy](
[uid] ,
gid,
gname ,
gnumber ,
price ,
amount,
salesdate
)
VALUES(
@uid ,
@gid ,
@gname ,
@gnumber ,
@price ,
@amount,
@salesdate
)
DECLARE dis_userCursor CURSOR
FOR
SELECT
dbo.[buy].[uid],
disNum
FROM
dbo.[buy] --订单表
LEFT JOIN dbo.[distinguish] --区分表
ON
dbo.[buy].UID = dbo.[distinguish].UID
OPEN dis_userCursor --打开游标
FETCH NEXT FROM dis_userCursor INTO @uid,@disNum
WHILE @@FETCH_STATUS =0 --循环读取
BEGIN
IF(@disNum =1)
BEGIN
SET @minprice =(@amount /@gnumber)
END
ELSE IF(@disNum =2)
BEGIN
SET @gnumber =(@amount /@price)
END
UPDATE dbo.[buy]
SET
gnumber =@gnumber ,price =@minprice
WHERE [uid] =@uid and gid=@gid and amount =@amount
--SET @id =@uid
--SET @g_id =@gid
DECLARE dis_discountCursor CURSOR
FOR
SELECT
dispercent, --折扣率
discount --最大折扣额
FROM
dbo.[buy] --订单表
LEFT JOIN dbo.[discountTable] --折扣表
ON
dbo.[buy].UID = dbo.[discountTable].UID
OPEN dis_discountCursor --打开游标
FETCH NEXT FROM dis_discountCursor INTO @dispercent,@discount
WHILE @@FETCH_STATUS =0 --循环读取
BEGIN
UPDATE dbo.[buy]
SET
discountMoney = @discountMoney---- 这里我要得到不同客户购买商品的总折扣额将它update到buy表中,就是这个不太好表示
WHERE [uid] =@uid and gid=@gid and amount =@amount
SET @id =@uid
SET @g_id =@gid
FETCH NEXT FROM dis_discountCursor INTO @dispercent,@discount
END
CLOSE dis_discountCursor --关闭
DEALLOCATE dis_discountCursor --删除
FETCH NEXT FROM dis_userCursor INTO @uid,@disNum
END
CLOSE dis_userCursor --关闭
DEALLOCATE dis_userCursor --删除
FETCH NEXT FROM dis_orderCursor INTO @uid,@gid,@gname,@gnumber,@price,@amount,@salesdate
END
CLOSE dis_orderCursor --关闭
DEALLOCATE dis_orderCursor --删除
END

支持(0) 反对(0) SH一03 | 园豆:185 (初学一级) | 2016-02-03 16:36
0

你可以定义两个变量

set @sum=@sum+@num

星海之辉 | 园豆:184 (初学一级) | 2016-02-03 16:30

这个@sum要先设置一个初始值吧

支持(0) 反对(0) SH一03 | 园豆:185 (初学一级) | 2016-02-03 16:32

@SH一03: 对,设置成0就行

支持(0) 反对(0) 星海之辉 | 园豆:184 (初学一级) | 2016-02-03 16:35

@星海之辉: 我是循环嵌套的 这个变量的设置是放在内层循环的外面还是外层循环的外面?

支持(0) 反对(0) SH一03 | 园豆:185 (初学一级) | 2016-02-03 16:38

@SH一03: @sum是要放在声明游标的外面,来计算各种价格之和

支持(0) 反对(0) 星海之辉 | 园豆:184 (初学一级) | 2016-02-03 16:40

@星海之辉: 放在while前面可以吗 我是要在内层循环中得到总值

支持(0) 反对(0) SH一03 | 园豆:185 (初学一级) | 2016-02-03 16:42
0

这个没必要使用游标

lucika.zh | 园豆:55 (初学一级) | 2016-02-04 09:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册