【发布时间】:2014-10-26 20:00:52
【问题描述】:
我在编写 Postgres 函数时遇到了困难,因为我不熟悉它。我有多个表要以这种格式导入 Postgres:
id | 1960 | 1961 | 1962 | 1963 | ...
____________________________________
1 23 45 87 99
2 12 31 ...
我需要转换成这种格式:
id | year | value
_________________
1 1960 23
1 1961 45
1 1962 87
...
2 1960 12
2 1961 31
...
我也想像这样读取函数:
SELECT all-years FROM imported_table;
CREATE a new_table;
FROM min-year TO max-year LOOP
EXECUTE "INSERT INTO new_table (id, year, value) VALUES (id, year, value)";
END LOOP;
但是,我在为此编写详细的细节时遇到了麻烦。在 PHP 中这样做对我来说会更容易,但我相信直接在 Postgres 函数中这样做会更干净。
年份(开始和结束)因表而异。有时,我什至可以每五年左右才有几年……
【问题讨论】:
-
版本?
select version(); -
所有列
NOT NULL?此外,以数字开头的列名如果没有双引号是不可能的。 -
非常感谢您的建议!我正在运行 9.2.6 版。重要问题:有没有办法以更自动化的方式读取年份列?一次,我需要手动输入五十年,其次,开始和结束年份可能因表格而异。
标签: sql postgresql pivot dynamic-sql unpivot