簡體   English   中英

SQL存儲過程中每個客戶的總和和計算

[英]Sum and calculations for each customer in SQL stored procedure

在SQL數據庫中,我獲得了每個用戶,每個客戶的存儲信息。

我需要編寫一個存儲過程,對客戶用戶的光盤使用量(MB)進行匯總。 當我獲得單個客戶的所有用戶的總數(totalDiscUsage)時,我需要執行一個計算(簡單示例):

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

之后,我需要將y寫入數據庫,並為所有客戶執行此操作。

我的問題是如何才能最好地做到這一點?

也許使用游標遍歷每個客戶,進行總和和計算,然后將結果寫入數據庫? 那將是一個好的解決方案嗎?

提前致謝。 幫助將不勝感激!

請-不要再次使用游標! :-) SQL是基於集合的-盡可能避免使用游標!

在這里,您可以-輕松地。 因此,對於每個客戶,您需要首先確定用戶數,然后進行簡單的計算並更新客戶。

我的建議是:

  • 創建一個小函數來計算給定客戶的用戶數
  • 創建第二個小函數以執行相同操作以計算總磁盤使用量
  • 將存儲的proc編寫為執行計算的簡單更新語句

    \n 創建過程dbo.UpdateCustomers()\n 從頭開始\n     更新客戶\n     SET y =(dbo.GetTotalDiskUsage(CustomerID)-dbo.GetTotalUsers(CustomerID)* 200)/ 50\n 結束 \n

似乎太簡單了,幾乎是:-)

您可以使用選擇查詢來插入值,例如:

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

或類似的東西。 不確定100%是否適合您的情況,因為您的問題我不清楚。

如果不參考數據的存儲方式(即相關的表定義),就無法真正談論報告給定數據集的“最佳方法”。

除非您當然要問如何最好地存儲數據以進行此報告,否則在這種情況下,您可能需要重新表達您的問題。

您絕對可以使用游標執行此操作。 您也有可能在一個語句中使用子查詢或可能的預先計算和一個臨時表來執行此操作,但是如果沒有更多信息則很難分辨。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM