如何通过几列逐个进行聚合计算?

时间:2016-11-30 18:13:31

标签: sql for-loop multiple-columns

我是SQL的新手,需要一些帮助。我有一个具有一些数值的表,我需要使用表中其他列的计算填充列(所有值为null)。 例如。我有一些价值观和总价值。我需要另一列来计算这两者之间的百分比。

我有很多列需​​要根据不同的列进行计算。例如。列名“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”

有什么想法吗?

1 个答案:

答案 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表通过查询列来构造逻辑。