sql - PostgreSQL 使用列索引操作值
问题描述
我有一个相当奇怪的问题,我找不到实施的解决方案。
我有一个要重新格式化的表格,如下所示:
+-------+-------+-------+-------+-------+-------+---------+
| 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 替换,因为值不应该包含在列 sums 中)直到公式列指定的索引的列值,然后将此删除值的总和添加到指定的索引。例如,在最后一行中,第 1-5 列被删除并添加到第 5 列。
列的字面意思是 col_1 等,所以即使是字符串操作也是可能的,但我不确定这是否是解决这个问题的好方法。
我根本不知道如何处理这个问题,所以任何帮助表示赞赏。非常感谢您提前。
解决方案
您可以编写CASE
表达式,返回NULL
先前字段和当前字段的总和乘以formula
或原始列值取决于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;
(注意:因为col_1
这可以简化,但就目前而言,它更强调模式。)
推荐阅读
- google-analytics - BigQuery:如何在物化视图中展平表格?
- php - 如何使用 PHP 按 SKU 获取 Square Inventory?
- javascript - 内部方法 [[GetOwnProperty]]
- c# - 从 System.Security.Cryptography 获取相同的加密字符串
- mongodb - 大数据仓库的非关系型数据库设计
- swift - 在 UIView 内播放视频剪辑到视图边界
- python - 如何从 Python 中的列表中获取特定值
- haskell - 为什么静态箭头泛化箭头?
- javascript - 放置复选标记时将文本复制到不同的文本区域
- json - Scala - 如何使用 json-path 拆分所有 List Json 节点列表