2016-11-30 51 views
1

我是SQL新手,需要一些幫助。我有一個表有一些數值,我需要填充一個列(所有值爲空)與表中的其他列的計算。例如, 。我有一些價值觀和總價值。我需要另一列來計算這兩者之間的百分比。如何通過幾列逐個進行一些聚合計算?

我有很多列需​​要根據不同的列計算填充。例如。列名「risk1」將幫助我計算並填充名爲「1per」的另一列。我的代碼看起來是這樣的:

UPDATE DPRA2_Export 
    SET "1Per" = ((CAST(Risk1 AS DECIMAL (38,2))/CAST(GrandTotal AS DECIMAL(38,2))) * 100); 

UPDATE DPRA2_Export 
    SET "2Per" = ((CAST(Risk2 AS DECIMAL (38,2))/CAST(GrandTotal AS DECIMAL(38,2))) * 100); 

UPDATE DPRA2_Export 
    SET "3Per" = ((CAST(Risk3 AS DECIMAL (38,2))/CAST(GrandTotal AS DECIMAL(38,2))) * 100); 

.................

它繼續這樣下去。

有沒有一種方法可以循環這個東西,而不是一次又一次地寫字。代碼中唯一更改的是列名「Risk%」和SET列名「%Per」

任何想法?

+0

桌子上有多少列? –

+0

目前有5個,但會上升。如果可能,我想要一個動態的方法來做到這一點。 –

+0

老實說,在那幾欄中,寫一些動態內容比維持標準更新語句要花費更長的時間。 –

回答

0

首先,具有連續名稱的列 - ,,。 。 。 - 是可疑的。一般來說,這種格式不適合用於關係數據庫。相反,應將數據存儲在每個風險一行和風險標識符中。

這樣的表格通常用於輸出的目的,但不用於存儲數據。

其次,該部門的數據類型可能完全沒有必要。如果您使用的數據庫不是整數除法,而您的值是整數,則可以使用更簡單的方法(如「* 1.0」)進行轉換。

最後,你可以發出一個update

UPDATE DPRA2_Export 
    SET "1Per" = Risk1*1.0/GrandTotal, 
     "2Per" = Risk2*1.0/GrandTotal, 
     "3Per" = Risk3*1.0/GrandTotal ; 

您可以通過查詢欄,使用information_schema表構建的邏輯。

+0

感謝您的提示!我仍然得到SQL的縈繞 –

相關問題