From: | Kirk Wythers <kwythers(at)umn(dot)edu> |
---|---|
To: | "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org> |
Subject: | un-pivot with crosstab? |
Date: | 2013-01-02 17:16:39 |
Message-ID: | CF72445B-D8C7-40A7-85C2-3BFFB38C74B1@umn.edu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
I am trying to follow the example given below, but in reverse. I have something like table2, that I am trying to "un-pivot" to look like table1… And I seem to be having a booger of a time.
My attempt:
SELECT * FROM crosstab(
'SELECT rowid, key1,key1
FROM test WHERE key1= ''value'' OR key2 = ''value''
ORDER BY 1,2'
) AS ct(rowid text, value int8);
Can anyone point out where my small brain is failing me?
PostgreSQL crosstab query - Rotate a table about a pivot
An interesting feature of relational databases(postgres in this case) is the ability to rotate the table about a pivot. So if you have data like this-
id | rowid | key | value
---+------+----+-------
1 | test1 | key1 | val1
2 | test1 | key2 | val2
3 | test1 | key3 | val3
4 | test1 | key4 | val4
5 | test2 | key1 | val5
6 | test2 | key2 | val6
7 | test2 | key3 | val7
8 | test2 | key4 | val8
And want to have a result set like this -
rowid | key1 | key2 | key3 | key4
------+------+-----+-----+------
test1 | val1 | val2 | val3 | val4
test2 | val5 | val6 | val7 | val8
It can be achieved by a "crosstab" query in a postgres database -
SELECT * FROM crosstab(
'SELECT rowid, key, value
FROM test WHERE key= ''key1'' OR key = ''key2''
OR key = ''key3'' OR key = ''key4''
ORDER BY 1,2'
) AS ct(rowid text, key1 text, key2 text,
key3 text, key4 text);
From | Date | Subject | |
---|---|---|---|
Next Message | Abraham, Danny | 2013-01-02 19:08:27 | Query fluctuates .... Strange strange ..... |
Previous Message | ERR ORR | 2013-01-02 17:04:47 | Fwd: Question on Trigram GIST indexes |