SQL存储过程中每个客户的求和和计算

问题描述 投票:0回答:5

在 SQL 数据库中,我获取了每个用户、每个客户的存储信息。

我需要编写一个存储过程来汇总客户用户的磁盘使用量 (MB)。当我得到单个客户的所有用户的总和(totalDiscUsage)时,我需要执行计算(简单的例子):

x = numberOfUsers * 200
y = (totalDiscUsage - x) / (10 * 5)

之后,我需要将 y 写入数据库,并为所有客户执行此操作。

我的问题是我怎样才能最好地做到这一点?

也许使用游标遍历每个客户,进行求和计算,并将结果写入数据库?这是一个好的解决方案吗?

提前致谢。非常感谢您的帮助!

sql stored-procedures
5个回答
4
投票

请不要再使用光标! :-) SQL 是基于集合的 - 尽可能避免使用游标!

在这里您可以轻松实现。所以对于每个客户,你需要先确定用户数量,然后做一个简单的计算,更新客户。

我的建议是:

  • 创建一个小函数来计算给定客户的用户数量
  • 创建第二个小函数来执行相同的操作来计算总磁盘使用量
  • 将存储过程编写为执行计算的简单更新语句

    创建过程 dbo.UpdateCustomers()
    开始时
        更新客户
        SET y = (dbo.GetTotalDiskUsage(客户ID) - dbo.GetTotalUsers(客户ID) * 200) / 50
    结尾
    

看起来太简单了,几乎:-)

马克


2
投票

您可以使用选择查询来插入以下值:

INSERT INTO DiskUsage
SELECT SUM(Users.Usage) FROM Customers INNER JOIN Users ON somefield and somefield

或者类似的东西。不能 100% 确定这是否适合您的情况,因为我从您的问题中不太清楚。


0
投票

如果不参考数据的存储方式(即相关的表定义),就无法真正谈论报告给定数据集的“最佳方法”。

当然,除非您询问如何最好地存储数据以进行此报告,在这种情况下,您可能需要重新表述您的问题。


0
投票

您肯定可以使用光标来完成此操作。您也有可能可以在一个语句中使用子查询或可能的预计算和临时表来完成此操作,但如果没有更多信息,很难说清楚。


0
投票

编写一个程序,使用curse概念来查找每个商品一月和二月销售额之间的差异,然后计算差异的总和并将其传递给调用语句作为程序的输出

© www.soinside.com 2019 - 2024. All rights reserved.