summaryrefslogtreecommitdiff
path: root/contrib/tablefunc/README.tablefunc
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tablefunc/README.tablefunc')
-rw-r--r--contrib/tablefunc/README.tablefunc119
1 files changed, 119 insertions, 0 deletions
diff --git a/contrib/tablefunc/README.tablefunc b/contrib/tablefunc/README.tablefunc
index 53d4cb99f25..2018a84323c 100644
--- a/contrib/tablefunc/README.tablefunc
+++ b/contrib/tablefunc/README.tablefunc
@@ -333,6 +333,125 @@ AS ct(row_name text, category_1 text, category_2 text, category_3 text);
==================================================================
Name
+crosstab(text, text) - returns a set of row_name, extra, and
+ category value columns
+
+Synopsis
+
+crosstab(text source_sql, text category_sql)
+
+Inputs
+
+ source_sql
+
+ A SQL statement which produces the source set of data. The SQL statement
+ must return one row_name column, one category column, and one value
+ column. It may also have one or more "extra" columns.
+
+ The row_name column must be first. The category and value columns
+ must be the last two columns, in that order. "extra" columns must be
+ columns 2 through (N - 2), where N is the total number of columns.
+
+ The "extra" columns are assumed to be the same for all rows with the
+ same row_name. The values returned are copied from the first row
+ with a given row_name and subsequent values of these columns are ignored
+ until row_name changes.
+
+ e.g. source_sql must produce a set something like:
+ SELECT row_name, extra_col, cat, value FROM foo;
+
+ row_name extra_col cat value
+ ----------+------------+-----+---------
+ row1 extra1 cat1 val1
+ row1 extra1 cat2 val2
+ row1 extra1 cat4 val4
+ row2 extra2 cat1 val5
+ row2 extra2 cat2 val6
+ row2 extra2 cat3 val7
+ row2 extra2 cat4 val8
+
+ category_sql
+
+ A SQL statement which produces the distinct set of categories. The SQL
+ statement must return one category column only. category_sql must produce
+ at least one result row or an error will be generated. category_sql
+ must not produce duplicate categories or an error will be generated.
+
+ e.g. SELECT DISTINCT cat FROM foo;
+
+ cat
+ -------
+ cat1
+ cat2
+ cat3
+ cat4
+
+Outputs
+
+ Returns setof record, which must be defined with a column definition
+ in the FROM clause of the SELECT statement, e.g.:
+
+ SELECT * FROM crosstab(source_sql, cat_sql)
+ AS ct(row_name text, extra text, cat1 text, cat2 text, cat3 text, cat4 text);
+
+ the example crosstab function produces a set something like:
+ <== values columns ==>
+ row_name extra cat1 cat2 cat3 cat4
+ ---------+-------+------+------+------+------
+ row1 extra1 val1 val2 val4
+ row2 extra2 val5 val6 val7 val8
+
+Notes
+
+ 1. source_sql must be ordered by row_name (column 1).
+
+ 2. The number of values columns is determined at run-time. The
+ column definition provided in the FROM clause must provide for
+ the correct number of columns of the proper data types.
+
+ 3. Missing values (i.e. not enough adjacent rows of same row_name to
+ fill the number of result values columns) are filled in with nulls.
+
+ 4. Extra values (i.e. source rows with category not found in category_sql
+ result) are skipped.
+
+ 5. Rows with a null row_name column are skipped.
+
+
+Example usage
+
+create table cth(id serial, rowid text, rowdt timestamp, attribute text, val text);
+insert into cth values(DEFAULT,'test1','01 March 2003','temperature','42');
+insert into cth values(DEFAULT,'test1','01 March 2003','test_result','PASS');
+insert into cth values(DEFAULT,'test1','01 March 2003','volts','2.6987');
+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_startdate','01 March 2003');
+insert into cth values(DEFAULT,'test2','02 March 2003','volts','3.1234');
+
+SELECT * FROM crosstab
+(
+ 'SELECT rowid, rowdt, attribute, val FROM cth ORDER BY 1',
+ 'SELECT DISTINCT attribute FROM cth ORDER BY 1'
+)
+AS
+(
+ rowid text,
+ rowdt timestamp,
+ temperature int4,
+ test_result text,
+ test_startdate timestamp,
+ volts float8
+);
+ rowid | rowdt | temperature | test_result | test_startdate | volts
+-------+--------------------------+-------------+-------------+--------------------------+--------
+ test1 | Sat Mar 01 00:00:00 2003 | 42 | PASS | | 2.6987
+ test2 | Sun Mar 02 00:00:00 2003 | 53 | FAIL | Sat Mar 01 00:00:00 2003 | 3.1234
+(2 rows)
+
+==================================================================
+Name
+
connectby(text, text, text, text, int[, text]) - returns a set
representing a hierarchy (tree structure)