Re: Flattening a kind of 'dynamic' table
От | Joe Conway |
---|---|
Тема | Re: Flattening a kind of 'dynamic' table |
Дата | |
Msg-id | 41FA6993.5000702@joeconway.com обсуждение исходный текст |
Ответ на | Re: Flattening a kind of 'dynamic' table (Alexandre Leclerc <alexandre.leclerc@gmail.com>) |
Ответы |
Re: Flattening a kind of 'dynamic' table
|
Список | pgsql-performance |
Alexandre Leclerc wrote: >>>>>Here a normal listing of design.product_department_time: >>>>> product_id | department_id | req_time >>>>>------------+---------------+---------- >>>>> 906 | A | 3000 >>>>> 906 | C | 3000 >>>>> 906 | D | 1935 >>>>> 907 | A | 1500 >>>>> 907 | C | 1500 >>>>> 907 | D | 4575 >>>>> 924 | A | 6000 >>>>> 924 | C | 1575 Sorry for jumping in on this thread so late -- I haven't been able to keep up with the lists lately. If I understand what you want correctly, you should be able to use crosstab from contrib/tablefunc: create table product_department_time(product_id int, department_id text, req_time int); insert into product_department_time values(906, 'A', 3000); insert into product_department_time values(906, 'C', 3000); insert into product_department_time values(906, 'D', 1935); insert into product_department_time values(907, 'A', 1500); insert into product_department_time values(907, 'C', 1500); insert into product_department_time values(907, 'D', 4575); insert into product_department_time values(924, 'A', 6000); insert into product_department_time values(924, 'C', 1575); select * from crosstab( 'select product_id, department_id, req_time from product_department_time order by 1', 'select ''A'' union all select ''C'' union all select ''D''' ) as (product_id int, a int, c int, d int); product_id | a | c | d ------------+------+------+------ 906 | 3000 | 3000 | 1935 907 | 1500 | 1500 | 4575 924 | 6000 | 1575 | (3 rows) You could make this dynamic for new values of department_id by wrapping it with a PL/pgSQL function. HTH, Joe
В списке pgsql-performance по дате отправления: