Transformar Linhas em Colunas no Firebird

20/09/2013

0

Pessoal alguém sabe como transformo linhas em colunas no firebird?

Vou aplicar em cima deste script:

Select extract(YEAR from despesas.datavencimento) || '/' ||
LPAD(extract(MONTH from despesas.datavencimento), 2,'0') as DATA,
classecontabil.classecontabil,
SUM(despesas.valorliquido) AS TOTAL
from despesas inner join classecontabil
on despesas.idclassecontabil = classecontabil.idclassecontabil
where classecontabil.custofixoouvariavel = 'FIXO' and
despesas.datavencimento >= :datainicial and despesas.datavencimento <= :datafinal
GROUP BY DATA, classecontabil.classecontabil


Obrigado



Claudio Junior

Claudio Junior

Responder

Posts

20/09/2013

Claudio Junior

Estou chegando perto, mas quero os valores da data dinâmicos entre a data inicial e final, sem precisar de vários iif

Select classecontabil.classecontabil,
SUM(IiF(extract(YEAR from despesas.datavencimento) || '/' ||
LPAD(extract(MONTH from despesas.datavencimento), 2,'0') = '2013/01',despesas.valorliquido, 0)) as "2013/01",

SUM(IiF(extract(YEAR from despesas.datavencimento) || '/' ||
LPAD(extract(MONTH from despesas.datavencimento), 2,'0') = '2013/02',despesas.valorliquido, 0)) as "2013/02",

SUM(IiF(extract(YEAR from despesas.datavencimento) || '/' ||
LPAD(extract(MONTH from despesas.datavencimento), 2,'0') = '2013/03',despesas.valorliquido, 0)) as "2013/03",

SUM(IiF(extract(YEAR from despesas.datavencimento) || '/' ||
LPAD(extract(MONTH from despesas.datavencimento), 2,'0') = '2013/04',despesas.valorliquido, 0)) as "2013/04"

from despesas inner join classecontabil
on despesas.idclassecontabil = classecontabil.idclassecontabil
where classecontabil.custofixoouvariavel = 'FIXO' and
despesas.datavencimento >= :datainicial and despesas.datavencimento <= :datafinal
GROUP BY DATA, classecontabil.classecontabil
Responder

20/09/2013

Claudio Junior

Estou chegando perto, mas quero os valores da data dinâmicos entre a data inicial e final, sem precisar de vários iif

Select classecontabil.classecontabil,
SUM(IiF(extract(YEAR from despesas.datavencimento) || '/' ||
LPAD(extract(MONTH from despesas.datavencimento), 2,'0') = '2013/01',despesas.valorliquido, 0)) as "2013/01",

SUM(IiF(extract(YEAR from despesas.datavencimento) || '/' ||
LPAD(extract(MONTH from despesas.datavencimento), 2,'0') = '2013/02',despesas.valorliquido, 0)) as "2013/02",

SUM(IiF(extract(YEAR from despesas.datavencimento) || '/' ||
LPAD(extract(MONTH from despesas.datavencimento), 2,'0') = '2013/03',despesas.valorliquido, 0)) as "2013/03",

SUM(IiF(extract(YEAR from despesas.datavencimento) || '/' ||
LPAD(extract(MONTH from despesas.datavencimento), 2,'0') = '2013/04',despesas.valorliquido, 0)) as "2013/04"

from despesas inner join classecontabil
on despesas.idclassecontabil = classecontabil.idclassecontabil
where classecontabil.custofixoouvariavel = 'FIXO' and
despesas.datavencimento >= :datainicial and despesas.datavencimento <= :datafinal
GROUP BY DATA, classecontabil.classecontabil
Responder

20/09/2013

Alex Lekao

Oi Claudio, boa tarde!!!

Eu sei que no SQL Server tem isso mais pratico, eh o PIVOT ele ja traz todo o trampo pra vc.

No Caso do Firebird, dei uma boa pesquisando e apenas usando subselects e os dados acabam ficando fixos, por exemplo todos os meses, e os sem valores aparecerao vazios, todos os dias, todos os dias da semana.

Nao achei nada que fosse dinamico nao.

Acredito que possa nao ser possivel no Firebird ter isso mais dinamicamente ou de maneira mais pratica.

Provavelmente vc tera que montar uma SP para fazer a coleta dos dados e armazena como uma nota tabela temporaria na estrutura que vc quer.

Infelizmente nao poderei te ajudar nessa.

Boa Sorte.

Abraco.

Alex - Lekao
Responder

20/09/2013

Claudio Junior

Valeu, eu vou tentando, se conseguir a solução posto aqui.

Abraços


Oi Claudio, boa tarde!!!

Eu sei que no SQL Server tem isso mais pratico, eh o PIVOT ele ja traz todo o trampo pra vc.

No Caso do Firebird, dei uma boa pesquisando e apenas usando subselects e os dados acabam ficando fixos, por exemplo todos os meses, e os sem valores aparecerao vazios, todos os dias, todos os dias da semana.

Nao achei nada que fosse dinamico nao.

Acredito que possa nao ser possivel no Firebird ter isso mais dinamicamente ou de maneira mais pratica.

Provavelmente vc tera que montar uma SP para fazer a coleta dos dados e armazena como uma nota tabela temporaria na estrutura que vc quer.

Infelizmente nao poderei te ajudar nessa.

Boa Sorte.

Abraco.

Alex - Lekao
Responder

20/09/2013

Alex Lekao

Otimo, vou acompanhar o Post para conhecimento.

Boa Sorte.

Abraco.

Alex - Lekao
Responder

20/09/2013

Claudio Junior

No momento já consegui fazer o que queria criando um relatório de referência cruzada no FastReport usando o primeiro SQL que postei, mas se conseguir um código que faça isso dentro do próprio banco coloco aqui.
Responder

23/09/2013

Alex Lekao

Legal.

Me interessei no assunto.

Ate falei com uns amigos que ja mexeram ou mexem como firebird e nao me disseram se seria possivel, alguns disseram que so com procedures e tal, mas nada conclusivo.

Acompanhando o post.
Responder

23/09/2013

Claudio Junior

Ainda não cheguei a uma conclusão significativa, tentei list com subquerys mas ainda não deu certo. Mas tenho certeza que existe alguma procedure que vai resolver.
Responder

23/09/2013

Claudio Junior

Ainda não cheguei a uma conclusão significativa, tentei list com subquerys mas ainda não deu certo. Mas tenho certeza que existe alguma procedure que vai resolver.
Responder

25/09/2013

Layla Pontes

nossa, isso é bem complexo pra mim que estou começando, ^^
Responder

25/09/2013

Claudio Junior

Se precisar de ajuda em algo é só falar :)

nossa, isso é bem complexo pra mim que estou começando, ^^
Responder

11/11/2013

Zilon Maciel

Fica filé, usando o comando Case...
Responder

12/11/2013

Alex Lekao

opa... nao sei extamente do case, o seu funcionamento, mas ele acaba ficando fixo as colunas.

o ideal eh usar o PIVOT, esse eu sei que tem no SQL Server, e faz exatamente isso, de transformar as linhas em colunas.

se nao me engano existe alguma coisa que da para fazer que deixa as colunas dinamicas, nao lembro exatamente se eh com funcao ou com procedure, ja vi muito issos na internet ajudando a fazer, mas era em SQL Server.

Abraco.
Responder

12/11/2013

Claudio Junior

Em Sql Server eu consigo fazer, só não dá certo em Firebird, valeu.
Responder

12/11/2013

Claudio Junior

Em Sql Server eu consigo fazer, só não dá certo em Firebird, valeu.
Responder

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

Aceitar