查看contrib模塊tablefunc。它提供了您正在尋找的那種數據透視表功能。 查看manual here。
請按照installation instructions here或在上面的評論中建議的文章@Paul Tomblin。
然後你的函數看起來是這樣的:
SELECT *
FROM crosstab($$
SELECT 'total_calls'::text AS col_name
,to_char(registime, '"x"YYYY_MM_01') as dt
,count(id) as total_call
FROM all_info
WHERE alarm_id is null
GROUP BY dt
ORDER BY dt
$$)
AS ct(
call_day text
,x2011_03_01 int8
,x2011_04_01 int8
,x2011_05_01 int8
,x2011_06_01 int8
,x2011_07_01 int8
,x2011_08_01 int8
,x2011_09_01 int8
,x2011_10_01 int8);
輸出:
call_day | x2011_03_01 | x2011_04_01 | x2011_05_01 | x2011_06_01 | x2011_07_01 | x2011_08_01 | x2011_09_01 | x2011_10_01
-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------
total_calls | 1 | 4 | 4 | 2 | 1 | 5 | 1 | 1
列名不能以數字開頭(或者你有雙引號),這就是爲什麼我帶x的日期前綴。我也簡化了你的查詢。
您可以將其封裝在視圖或函數中以便重複使用。
也許是一個動態調整列名和EXECUTE的plpgsql函數。
More details, explanation and links in this related answer。
對不起,但你怎麼試圖顯示的數據,你使用什麼語言/程序? –
感謝丹尼爾,我只是使用結果作爲數據源,在這種情況下,我可以在ireprot中顯示結果。 Ireport是一名報告設計師。 – diligent
這是任何幫助:http://www.postgresonline.com/journal/archives/14-CrossTab-Queries-in-PostgreSQL-using-tablefunc-contrib.html –