Mauro,
Valeu pela ajuda, agora ta funcionando perfeito.
Grato
Paulo
-----Mensagem original-----
De: Mauro Matos [mailto:[EMAIL PROTECTED]
Enviada em: quarta-feira, 22 de março de 2006 14:02
Para: [EMAIL PROTECTED]; [email protected]
Assunto: Re: [PostgreSQL-Brasil] RES: CROSSTAB FUNCTION
Paulo Rogerio Zimolo escreveu:
> Prezados Salvador e Mauro, bom dia!
> Obrigado pela ajuda.
> Refiz a funcao como sugerido (usando apenas aspas simples - vide
> abaixo), entretanto, continuo recebendo seguinte mensagem de erro
> (mesmo se usar a contra-barra no lugar de aspas)
> Ja tentei de varias maneiras:
>
> where volume = 'TEU''S' or volume= 'FEU''S'
> where volume = ''TEU\'S'' or volume= ''FEU\'S''/
> mas nenhuma delas parece funcionar na funcao CROSSTAB
> sDS
> Paulo
>
> ===============
> ERROR: syntax error at or near "S" at character 63
> QUERY: select distinct volume from tbl_sindapar
> where volume = 'TEU'S' or volume= 'FEU'S'
>
> order by 1
> =======================
>
> SELECT * FROM crosstab (
> 'select fk_carrier, fk_direction, volume, sum(quantity) from tbl_sindapar
> where fk_direction = ''Export''
> group by fk_carrier, fk_direction, volume
> order by 1',
>
> 'select distinct volume from tbl_sindapar
> where volume = ''TEU''S'' or volume= ''FEU''S''
>
> order by 1')
>
> AS (carrier text, sentido text, TEUS int4, FEUS int4);
Veja os arquivos:
/usr/share/doc/postgresql-contrib-8.1.2/README.tablefunc
/usr/share/pgsql/contrib/tablefunc.sql
Use:
WHERE volume = ''TEUS''''S'' OR volume = ''FEU''S''
Porque se trata de um string dentro de uma outra string. :)
Exemplo:
teste1=# create table ct(id serial, rowclass text, rowid text, attribute
text, value text);
teste1=# INSERT INTO CT(rowclass, rowid, attribute, value)
VALUES('grupo1','teste1','name\'s','McDonald\'s');
INSERT 0 1
teste1=# INSERT INTO CT(rowclass, rowid, attribute, value)
VALUES('grupo2','teste1','name\'s','Car\'s');
INSERT 0 1
teste1=# select * from ct where rowclass='grupo1';
id | rowclass | rowid | attribute | value
----+----------+--------+-----------+------------
1 | grupo1 | teste1 | name's | McDonald's
2 | grupo1 | teste1 | name's | Car's
(2 registros)
teste1=# SELECT * FROM crosstab('SELECT rowid, attribute, value FROM ct
WHERE rowclass = ''grupo1'' AND attribute = ''name''''s'' ORDER BY
value;') AS ct(row_name text, category_1 text, category_2 text);
row_name | category_1 | category_2
----------+------------+------------
teste1 | Car's | McDonald's
(1 registro)
T+
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br