2016-11-30 52 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的萦绕 –