日期列表
Use the 生成系列函数 http://www.postgresql.org/docs/8.0/static/functions-srf.html获取可以添加到日期的数字列表,以便获取日期列表:
SELECT CURRENT_DATE + s.a AS dates
FROM generate_series(0,14,7) as s(a);
Result:
dates
------------
2004-02-05
2004-02-12
2004-02-19
Pivoting
问题的后一部分涉及旋转结果集——将行数据转换为列数据。 PIVOT 和 UNPIVOT 是 ANSI,但我不认为它们是目前 PostgreSQL 支持 http://www.postgresql.org/docs/current/static/tablefunc.html。最一致支持的旋转查询方法是使用聚合函数:
SELECT t.account,
SUM(CASE WHEN t.date = '2010-01-01' THEN t.amount END) AS '2010-01-01',
SUM(CASE WHEN t.date = '2010-01-02' THEN t.amount END) AS '2010-01-02',
SUM(CASE WHEN t.date = '2010-01-03' THEN t.amount END) AS '2010-01-03',
SUM(t.amount) AS Balance
FROM (SELECT CURRENT_DATE + s.a AS dates
FROM generate_series(0,14,7) as s(a)) x
LEFT JOIN TRANSACTIONS y ON y.date = x.date
GROUP BY t.account
动态列
...方法动态SQL http://www.postgresql.org/docs/8.1/interactive/ecpg-dynamic.html.