我有一个谷歌表格如下
我已经通过Python将这个GS导入我的PostgreSQL(11.5)。我所做的是在我的数据库中创建一个表,其中包含表中指定的所有列,将列名视为第二行中的值(超过60列,最多可以增加120列),并通过PY脚本将数据导入表中
所以我的第一个要求是:有没有更好的动态方式?
其次, 我必须将所有这些列转换成除“重要关键字”列以外的行,我要将行值(即“18.12.19”)转换为列名,所有其他行值应根据转换后的列名填充
预期结果:
Category 18.12.19
B- Komplex 9 (0)
B12 1, 4, 5, 7, 8, 13, 15, 17 (0)
Betain 1 (0)
Calcium 1, 7 (0)
Cholin 0 (0)
Chromium No search results
D1 1, 3, 6, 8, 13, 21, 29(0)
那怎么做呢
我正在使用下面的查询:
SELECT 'SELECT *
FROM crosstab(
''SELECT unnest(''' || quote_literal(array_agg(attname))
|| '''::text[]) AS col
, row_number() OVER ()
, unnest(ARRAY[' || string_agg(quote_ident(attname)
|| '::text', ',') || ']) AS val
FROM ' || attrelid::regclass || '
ORDER BY generate_series(1,' || count(*) || '), 2''
) t (col text, '
|| (SELECT string_agg('r'|| rn ||' text', ',')
FROM (SELECT row_number() OVER () AS rn FROM sheet.shop_rank) t)
|| ')' AS sql
FROM pg_attribute
WHERE attrelid = 'sheet.shop_rank'::regclass
AND attnum > 0
AND NOT attisdropped
GROUP BY attrelid;
上面的查询将生成一个动态查询,如果我们运行它,列将被转换,我得到的结果如下所示
我现在得到的结果:
col r1
B12 1, 4, 5, 7, 8, 13, 15, 17 (0)
Betain 1 (0)
B- Komplex 9 (0)
Calcium 1, 7 (0)
Cholin 0 (0)
Important keyword 18.12.19
那么有没有一种动态的方法呢?或者有更好的解决方案吗?任何建议/解决方案都会大有帮助。
目前没有回答
相关问题 更多 >
编程相关推荐