【发布时间】:2021-12-21 01:23:47
【问题描述】:
我需要将信息转换成列,但是在某些情况下,一个答案可以有多个值。
我设法使用以下代码将答案连接到一个列表中:
'{' || ARRAY_TO_STRING(ARRAY_AGG('"' || Question || '":' || Answer),',') || '}' AS key_value
然后使用此列我可以提取它:
CAST(COALESCE(key_value::JSON ->> 'consumption_soda','0') AS INTEGER) AS soda_consumption,
CAST(COALESCE(key_value::JSON ->> 'consumption_water','0') AS INTEGER) AS water_consumption
但是,当我想提取 soda_painpoints 时,它只会返回第一个值。 你能帮我找到我的问题的答案吗?
!!!!更新: 刚刚在原始数据中发现一些答案是重复的,必须过滤掉。必须始终使用最新的答案,除非这两个答案发生在不同的月份。然后两者都应该被提取。 在一个单元格中,可能有多个答案需要分成几列。或者答案可以在不同的行中。
原始数据表的起始格式:
我想要一个像这样的平坦输出,其中痛点最多可以有 8 个值 -> 8 soda_painpoints 列:
【问题讨论】:
-
这些实际上不是NULL,只是在excel中分开以便于查看。
标签: arrays json postgresql coalesce