我有一個prefs
表,這裏的相關列:PostgreSQL的交叉表/透視問題
mydb=> SELECT pref_id, pref_name, pref_value FROM prefs;
pref_id | pref_name | pref_value
---------+--------------+----------------
1 | PagerNumber | 2125551234
2 | PagerCarrier | @att.com
3 | PagerCarrier | @something.com
我想產生這樣的事:
section | pager_number | pager_carrier
---------+----------------+---------------
1 | 2125551234 |
2 | | @att.com
3 | | @something.com
所以我用交叉表,下面這例如在計算器:PostgreSQL Crosstab Query
SELECT row_name AS section,
category_1::text AS pager_number,
category_2::text AS pager_carrier
FROM crosstab('select pref_id::bigint, pref_name::text, pref_value::text
FROM prefs')
AS ct (row_name bigint, category_1 text, category_2 text);
所有數值都進入pager_number
,並pager_carrier
保留爲空:
section | pager_number | pager_carrier
---------+----------------+---------------
1 | 2125551234 |
2 | @att.com |
3 | @something.com |
任何人都可以看到這是怎麼回事?
謝謝,但你的解決方案沒有什麼不同,我得到了同樣的結果。你所指的語法錯誤在哪裏? – nnyby 2012-08-01 00:17:08
對不起,我無法訪問Postgress來試用它。嘗試像我在示例中那樣添加順序。 – Edmon 2012-08-01 00:40:54
我看到發生了什麼 - 你得到一個交叉表,但它看起來並不像你期望的那樣。它是crosstabbing/pivoting pref id和值。嘗試插入更多的名稱和值的組合。它應該開始顯示一個關鍵點。我認爲你的標籤也讓你感到困惑。 – Edmon 2012-08-01 00:50:44