@ -23,42 +23,48 @@ SELECT * FROM crosstab2('SELECT rowid, attribute, val FROM ct where rowclass = '
----------+------------+------------
----------+------------+------------
test1 | val2 | val3
test1 | val2 | val3
test2 | val6 | val7
test2 | val6 | val7
(2 rows)
| val10 | val11
(3 rows)
SELECT * FROM crosstab3('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;');
SELECT * FROM crosstab3('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;');
row_name | category_1 | category_2 | category_3
row_name | category_1 | category_2 | category_3
----------+------------+------------+------------
----------+------------+------------+------------
test1 | val2 | val3 |
test1 | val2 | val3 |
test2 | val6 | val7 |
test2 | val6 | val7 |
(2 rows)
| val10 | val11 |
(3 rows)
SELECT * FROM crosstab4('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;');
SELECT * FROM crosstab4('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' and (attribute = ''att2'' or attribute = ''att3'') ORDER BY 1,2;');
SELECT * FROM crosstab2('SELECT rowid, attribute, val FROM ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') ORDER BY 1,2;');
SELECT * FROM crosstab2('SELECT rowid, attribute, val FROM ct where rowclass = ''group2'' and (attribute = ''att1'' or attribute = ''att2'') ORDER BY 1,2;');
row_name | category_1 | category_2
row_name | category_1 | category_2
@ -103,25 +109,28 @@ SELECT * FROM crosstab4('SELECT rowid, attribute, val FROM ct where rowclass = '
(2 rows)
(2 rows)
SELECT * FROM crosstab('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' ORDER BY 1,2;') AS c(rowid text, att1 text, att2 text);
SELECT * FROM crosstab('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' ORDER BY 1,2;') AS c(rowid text, att1 text, att2 text);
rowid | att1 | att2
rowid | att1 | att2
-------+------+------
-------+------+-------
test1 | val1 | val2
test1 | val1 | val2
test2 | val5 | val6
test2 | val5 | val6
(2 rows)
| val9 | val10
(3 rows)
SELECT * FROM crosstab('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' ORDER BY 1,2;') AS c(rowid text, att1 text, att2 text, att3 text);
SELECT * FROM crosstab('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' ORDER BY 1,2;') AS c(rowid text, att1 text, att2 text, att3 text);
rowid | att1 | att2 | att3
rowid | att1 | att2 | att3
-------+------+------+------
-------+------+-------+-------
test1 | val1 | val2 | val3
test1 | val1 | val2 | val3
test2 | val5 | val6 | val7
test2 | val5 | val6 | val7
(2 rows)
| val9 | val10 | val11
(3 rows)
SELECT * FROM crosstab('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' ORDER BY 1,2;') AS c(rowid text, att1 text, att2 text, att3 text, att4 text);
SELECT * FROM crosstab('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' ORDER BY 1,2;') AS c(rowid text, att1 text, att2 text, att3 text, att4 text);
rowid | att1 | att2 | att3 | att4
rowid | att1 | att2 | att3 | att4
-------+------+------+------+------
-------+------+-------+-------+-------
test1 | val1 | val2 | val3 | val4
test1 | val1 | val2 | val3 | val4
test2 | val5 | val6 | val7 | val8
test2 | val5 | val6 | val7 | val8
(2 rows)
| val9 | val10 | val11 | val12
(3 rows)
-- check it works with OUT parameters, too
-- check it works with OUT parameters, too
CREATE FUNCTION crosstab_out(text,
CREATE FUNCTION crosstab_out(text,
@ -130,11 +139,12 @@ RETURNS setof record
AS '$libdir/tablefunc','crosstab'
AS '$libdir/tablefunc','crosstab'
LANGUAGE C STABLE STRICT;
LANGUAGE C STABLE STRICT;
SELECT * FROM crosstab_out('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' ORDER BY 1,2;');
SELECT * FROM crosstab_out('SELECT rowid, attribute, val FROM ct where rowclass = ''group1'' ORDER BY 1,2;');
rowid | att1 | att2 | att3
rowid | att1 | att2 | att3
-------+------+------+------
-------+------+-------+-------
test1 | val1 | val2 | val3
test1 | val1 | val2 | val3
test2 | val5 | val6 | val7
test2 | val5 | val6 | val7
(2 rows)
| val9 | val10 | val11
(3 rows)
--
--
-- hash based crosstab
-- hash based crosstab
@ -150,38 +160,46 @@ insert into cth values(DEFAULT,'test2','02 March 2003','temperature','53');
insert into cth values(DEFAULT,'test2','02 March 2003','test_result','FAIL');
insert into cth values(DEFAULT,'test2','02 March 2003','test_result','FAIL');
insert into cth values(DEFAULT,'test2','02 March 2003','test_startdate','01 March 2003');
insert into cth values(DEFAULT,'test2','02 March 2003','test_startdate','01 March 2003');
insert into cth values(DEFAULT,'test2','02 March 2003','volts','3.1234');
insert into cth values(DEFAULT,'test2','02 March 2003','volts','3.1234');
-- next group tests for NULL rowids
insert into cth values(DEFAULT,NULL,'25 October 2007','temperature','57');
insert into cth values(DEFAULT,NULL,'25 October 2007','test_result','PASS');
insert into cth values(DEFAULT,NULL,'25 October 2007','test_startdate','24 October 2007');
insert into cth values(DEFAULT,NULL,'25 October 2007','volts','1.41234');
-- return attributes as plain text
-- return attributes as plain text
SELECT * FROM crosstab(
SELECT * FROM crosstab(
'SELECT rowid, rowdt, attribute, val FROM cth ORDER BY 1',
'SELECT rowid, rowdt, attribute, val FROM cth ORDER BY 1',
'SELECT DISTINCT attribute FROM cth ORDER BY 1')
'SELECT DISTINCT attribute FROM cth ORDER BY 1')
AS c(rowid text, rowdt timestamp, temperature text, test_result text, test_startdate text, volts text);
AS c(rowid text, rowdt timestamp, temperature text, test_result text, test_startdate text, volts text);