Como usar o Crosstab no Postgre

02/06/2017

0

Ola,tenho uma duvida referente ao crosstab, pois preciso que cada linha represente uma coluna da tabela produtos com a tabela estoque , a reprodução da primeira linha fique com id de estoque,a segunda linha com id do produto e a terceira com o nome do produto,alguem poderia me apresentar uma base ou uma solução para este problema?
Thiago

Thiago

Responder

Post mais votado

02/06/2017

Segue um site aonde tem vários exemplos.

http://www.vertabelo.com/blog/technical-articles/creating-pivot-tables-in-postgresql-using-the-crosstab-function

Fabio Parreira

Fabio Parreira
Responder

Mais Posts

04/06/2017

Thiago

Muito obrigado,mas eu queria um exemplo referente ao crosstab dinâmico, você teria um exemplo ou um site com esse assunto?
Responder

04/06/2017

Thiago

Segue um site aonde tem vários exemplos.

http://www.vertabelo.com/blog/technical-articles/creating-pivot-tables-in-postgresql-using-the-crosstab-function


tentei esse código, esta correto?

create or replace FUNCTION testeDinamico_crosTab ()
returns character varying(500) As
$$
DECLARE MAXCount int;
begin
SELECT MaxCount = max(Id)
FROM (
SELECT nome
,count(Id) AS Id
FROM dbo.produtos
GROUP BY nome
) X;

DECLARE SQL character varying (500);
d INT;
d:=0;
WHILE d < @MaxCount
BEGIN
SET d := d + 1;
SET SQL := COALESCE(Sql + ', ', '') + 'Col' + cast(d AS character varying(10));
END

SET SQL := N';WITH CTE AS (
SELECT p.ID, p.nome, ''Col'' + CAST(row_number() OVER (PARTITION BY ID ORDER BY nome) AS character varying(10)) AS RowNo
FROM dbo.produtos p
)
SELECT *
FROM CTE
PIVOT (MAX(p.nome) FOR RowNo IN (' + SQL + N')) pvt';

PRINT SQL;

EXECUTE (SQL);
return SQL;
end;
$$
LANGUAGE plpgsql;
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar