我有一个很奇怪的问题,我找不到实现的解决方案。
我有一张要重新格式化的表格,如下所示:
+-------+-------+-------+-------+-------+-------+---------+
| Col_1 | Col_2 | Col_3 | Col_4 | Col_5 | Col_6 | Formula |
+-------+-------+-------+-------+-------+-------+---------+
| x | x | x | x | x | x | |
| | y | | y | y | y | 4 |
| | z | z | z | z | | 2 |
| t | t | t | t | t | t | 5 |
| m | m | m | | | | 5 |
+-------+-------+-------+-------+-------+-------+---------+
x,y,z和t是数字值,并且在每一行中,该值可以完全相同或为空白。在另一列中,为我提供了要操作的列索引。
然后,在视图中,我需要将此表转换为如下所示的内容:
+-------+-------+-------+-------+-------+-------+---------+
| Col_1 | Col_2 | Col_3 | Col_4 | Col_5 | Col_6 | Formula |
+-------+-------+-------+-------+-------+-------+---------+
| x | x | x | x | x | x | |
| | | | 2*y | y | y | 4 |
| | z | z | z | z | | 2 |
| | | | | 5*t | t | 5 |
| | | | | 3*m | | 5 |
+-------+-------+-------+-------+-------+-------+---------+
用言语来说,我需要删除(或替换为0,因为不应将值包括在列总和中)列的值,直到公式列指定的索引为止,然后将此删除后的值的总和添加到指定的索引。 例如,在最后一行中,第1-5列被删除并添加到第5列。
列实际上被命名为col_1等,因此甚至可以进行字符串操作,但我不确定这是否是解决此问题的好方法。
我根本不知道如何处理此问题,因此不胜感激。 预先非常感谢您。
答案 0 :(得分:0)
您可以编写CASE
表达式,这些表达式返回NULL
,先前字段和当前字段的总和乘以formula
或原始列值(取决于{{1}) }。
formula
(注意:对于SELECT CASE
WHEN formula < 1 THEN
NULL
WHEN formula = 1 THEN
(coalesce(col_1, 0)) * formula
ELSE
col_1
END col_1,
CASE
WHEN formula < 2 THEN
NULL
WHEN formula = 2 THEN
(coalesce(col_1, 0)
+ coalesce(col_2, 0)) * formula
ELSE
col_2
END col_2,
...
CASE
WHEN formula < 6 THEN
NULL
WHEN formula = 6 THEN
(coalesce(col_1, 0)
+ coalesce(col_2, 0)
+ coalesce(col_3, 0)
+ coalesce(col_4, 0)
+ coalesce(col_5, 0)
+ coalesce(col_6, 0)) * formula
ELSE
col_6
END col_6,
formula
FROM elbat;
,这可以简化,但是就它的立场而言,它更加强调了模式。)