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);
-----Mensagem original-----
De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]Em nome de Salvador S. Scardua
Enviada em: terça-feira, 21 de março de 2006 09:27
Para: Lista PostgreSQL - Brasil
Assunto: Re: [PostgreSQL-Brasil] CROSSTAB FUNCTION

Sim Mauro, sua resposta deixou uma ótima conclusão,
Paulo Rogerio possuia dois erros de sintaxe em sua Query,
 
Primeiro suas strings estavam delimitadas por aspas duplas, quando o postgres trabalhas com aspas simples para Strings em Query
 
Mais informações sobre SELECT em:
 
Segundo, não estava escapando as aspas simples, que "cortavam" a string pela metade, dando erro após o fim da String :
 
"ERROR:  syntax error at or near "S" at character 288"
 
A solução para este problema é o uso de caracteres de Scape, neste caso duas formas de escapar caracteres podem ser utilizadas:
 
Mais informações sobre escaping
 
1 - ' \ '   (contra-barra, barra invertida, backslash)
 
SELECT
              *
FROM
           SCHEMA.TABLE
WHERE
           column  = 'salva\'dor' 
 
 
2 - Duplicar o caractere especial (aspas simples é considerado um caractere especial / reservado, logo quando você precisa usá-lo como caractere comum, precisa DIZER que o quer como caractere comum, é preciso escapá-lo, uma outra forma de escapar um caractere especial é duplicando o mesmo:
 
SELECT
              *
FROM
           SCHEMA.TABLE
WHERE
           column  = 'salva''dor' 
 
Logicamente este é apenas um exemplo para facilitar a compreensão, a sintaxe do Mauro utilizando operadores corretos para strings é a recomendada pela documentação do PostgreSQL:
 
SELECT
             *
 FROM
             CONTATOS
WHERE
            NOME LIKE 'WHAT\'S%';
 
Mais informações sobre operadores e funções de strings em: http://www.postgresql.org/docs/8.0/static/functions-matching.html

 
 
 
Message: 1
Date: Mon, 20 Mar 2006 22:24:52 -0300
From: Mauro Matos <[EMAIL PROTECTED]>
Subject: Re: [PostgreSQL-Brasil] CROSSTAB FUNCTION
To: [EMAIL PROTECTED][email protected]
Message-ID: <[EMAIL PROTECTED]>
Content-Type: text/plain; charset="iso-8859-1"

Paulo Rogerio Zimolo escreveu:
> Amigos, bom dia!
> Estou com um problema na funcao abaixo, pois sempre que executo recebo
> o seguinte erro:
> *ERROR:  syntax error at or near "S" at character 288*
> Sei que o erro refere-se ao apostrofo no titulo da coluna (TEU'S), mas
> nao sei como fazer para resolver.
> Alguem pode me ajudar?
> Sds
> Paulo


>  SELECT * FROM crosstab (
>  'select year, fk_carrier, fk_direction, volume, sum(quantity) from
> tbl_sindapar
>  where year =  '' 2005 '' and fk_direction =  '' Export ''
>  group by year, 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 ("year" int4,  carrier text, sentido text, "TEU'S" int4, "FEU'S"
> int4);
> ------------------------------------------------------------------------
>
> _______________________________________________
> Grupo de Usuários do PostgreSQL no Brasil
> http://www.postgresql.org.br
Veja se ajuda. Um exemplo de consulta no terminal interativo psql:

teste1=# insert into contatos (nome,email,endereco) values ('WHAT\'S
YOUR NAME','[EMAIL PROTECTED]','RUA X, 9999');
INSERT 0 1

teste1=# SELECT * FROM CONTATOS WHERE NOME LIKE 'WHAT\'S%';
 id |       nome       |        email         |  endereco
----+------------------+----------------------+-------------
  8 | WHAT'S YOUR NAME | [EMAIL PROTECTED] | RUA X, 9999
(1 registro)

-------------- Próxima Parte ----------
Um anexo não texto foi limpo...
Nome  : mauromatos.vcf
Tipo  : text/x-vcard
Tam   : 117 bytes
Descr.: não disponível
Url   : http://pgfoundry.org/pipermail/brasil-usuarios/attachments/20060321/f8d14e1f/attachment-0001.vcf

------------------------------

Message: 2
Date: Tue, 21 Mar 2006 08:31:27 -0300
From: "Salvador S. Scardua" <[EMAIL PROTECTED]>
Subject: Re: [PostgreSQL-Brasil] CROSSTAB FUNCTION
To: <[email protected]>
Message-ID: <[EMAIL PROTECTED]>
Content-Type: text/plain; charset="iso-8859-1"

Erro meu!
meu desculpe, esqueci de corrigir as aspas que guardam toda string, tente assim:

where volume = 'TEU''S' or volume= "FEU''S'

Um abraço.



>Message: 5
>Date: Mon, 20 Mar 2006 11:41:10 -0300
>From: "Paulo Rogerio Zimolo" <[EMAIL PROTECTED]>
>Subject: [PostgreSQL-Brasil] RES:  CROSSTAB FUNCTION
>To: <[email protected]>
>Message-ID: >[EMAIL PROTECTED]>
>Content-Type: text/plain; charset="iso-8859-1"

>Salvador, obrigado pela ajuda.
>Fiz como sugerido e esta retornando o seguinte:

>ERROR:  column "TEU'S" does not exist
>CONTEXT:  SQL statement "select distinct volume from tbl_sindapar
 >where volume = "TEU'S" or volume = "FEU'S"
 >order by 1"

>Alguma ideia?
>sds
>Paulo
> -----Mensagem original-----
>De: [EMAIL PROTECTED]
>[mailto:[EMAIL PROTECTED] nome de Salvador S. Scardua
> Enviada em: segunda-feira, 20 de março de 2006 10:51
>Para: Lista PostgreSQL - Brasil
>  Assunto: Re: [PostgreSQL-Brasil] CROSSTAB FUNCTION


>  Verifique esta parte:

>  where volume = "TEU'S" or volume= "FEU'S"

>  Muito provavelmente você precisará "escapar" o caractere ' (aspas
>simples), para que a Query funcione.
> Faça um teste duplicando o caractere aspas simples, o tornando assim,
>escapado.

>  where volume = "TEU''S" or volume=  "FEU ' 'S"
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://pgfoundry.org/pipermail/brasil-usuarios/attachments/20060321/0877fd7d/attachment-0001.html
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
http://www.postgresql.org.br

Responder a