Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

felipejose

transformar linha em coluna

Recommended Posts

Boa tarde!

 

Pessoal, preciso fazer um relatório gerencial, onde eu possuo os registros parecido assim:

 

 

coditem         competencia     saldo
1                01/2012          50
1                02/2012          30
1                03/2012          80

 

 

 

 

Eu preciso de um relatório onde as linhas com as datas sejam as colunas, exemplo:

 


coditem         01/2012      02/2012        03/2012
1                  50           30            80 

 

 

Como fazer neste caso?

 

Há algumas complicações, onde o mês tem que aparecer da seguinte forma: "JANEIRO/2013", "FEVEREIRO/2013", etc...

 

Abaixo o que estou tentando fazer, porém zerado... help-me please!!

 

 

 

 

select * from (select distinct trunc(competencia,'month') competencia,
                                to_char(competencia,'MONTH') mes
                    from inventario, item
                    where inventario.empresa = 1    
                      and inventario.competencia between trunc(add_months(sysdate,-6))
                      and trunc(add_months(sysdate,-1))  
                      and item.tipo_item in (1,2,2,3)
                      )
                      pivot
                      (
                       count(competencia)
                       for mes in ('MARÇO','ABRIL','MAIO','JUNHO','JULHO')
                       )
                       order by 1 asc

Compartilhar este post


Link para o post
Compartilhar em outros sites

O QUE RETORNA

 

select distinct trunc(competencia,'month') competencia,                                 to_char(competencia,'MONTH') mes                     from inventario, item                     where inventario.empresa = 1                           and inventario.competencia between trunc(add_months(sysdate,-6))                       and trunc(add_months(sysdate,-1))                         and item.tipo_item in (1,2,2,3)SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL

?

RETORNA EM PORTUGUÊS ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Motta.

 

Você se refere ao "SELECT TO_CHAR(SYSDATE,'MONTH') FROM DUAL"??

 

Caso este, sim, o mesmo retorna o mes atual em português.

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

aqui o bd está na lingua da rainha, fiz assim :

 


SELECT *
from (
SELECT to_char(created,'mm') mes , count(OBJECT_NAME) qtd
FROM USER_OBJECTS
where to_char(created,'yyyy') = '2013'
GROUP BY TO_CHAR(CREATED,'mm')
)
PIVOT (SUM(QTD) AS QTD FOR (mes) IN ('01' AS JAN, '02' AS FEV, '03' AS MAR, '03' AS ABR,
                                      '05' AS MAI, '06' AS JUN, '07' AS JUL, '08' AS AGO))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta.

 

Muito obrigado pelo retorno, já tens me ajudado muito.

 

No meu caso tenho que trabalhar com mais tabelas. Hoje tenho o seguinte resultado:

 

CODITEM DESITEM COMPETENCIA QUANTIDADE VALOR
1 ITEM TESTE 1 JANEIRO 30 50,00
1 ITEM TESTE 1 FEVEREIRO 50 80,00

 

 

Tenho que gerar um relatório para comparação entre os meses, ficando da seguinte forma:

 

CODITEM DESCRICAO JANEIRO VALOR1 FEVEREIRO VALOR2
1 ITEM TESTE 1 30 50,00 50 80,00

 

 

Sendo que a descricao do item está em outra tabela e o valor em outra. Neste caso são três tabelas. Terá outros relatórios em que terei que usar ainda mais tabelas.

 

Cara, se puderes me ajudar ficarei muito grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que será preciso duas linhas de pivot uma para qtd e outra valor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde, Motta.

 

O que vai na cluna que eu quero é o que eu coloco no count? Exemplo:

 

 

  pivot
      (

       count(qtd)
       for mes in ('JUNHO')
       )

 

 

Pois está trazendo a coluna JUNHO zerada.

 

 

Abaixo um exemplo do que estou efetuando e está trazendo a coluna quantidade com as quantidades e a coluna "JUNHO" com valores zerados.

 

 

 

 

select * from (select unique
                to_char(INVENTARIO.competencia,'mm') mes,
                INVENTARIO.EMPRESA,
                INVENTARIO.DEPOSITO,
                INVENTARIO.ITEM "CÓDIGO ITEM",
                INVENTARIO.VERSAO,
                ITEM.DESCRICAO "DESCRICAO ITEM",
                VERSAOITEM.DETALHES "DETALHES ITEM",
                ITEM.UNIDADE,
                INVENTARIO.VALOR,
                INVENTARIO.QUANTIDADE
              from INVENTARIO, ITEM, VERSAOITEM
              where INVENTARIO.competencia = '1/06/13 00:00:00'
                and INVENTARIO.quantidade > 0
                and INVENTARIO.empresa in (1,2)
                and ITEM.tipo_item in (2,3)
                and ITEM.codigo = INVENTARIO.ITEM
                and INVENTARIO.item = VERSAOITEM.produto
                and INVENTARIO.versao = VERSAOITEM.VERSAO
                and ITEM.codigo = VERSAOITEM.produto
              group by INVENTARIO.competencia,
                       INVENTARIO.EMPRESA,
                       INVENTARIO.DEPOSITO,
                       INVENTARIO.ITEM,
                       INVENTARIO.VERSAO,
                       ITEM.DESCRICAO,
                       VERSAOITEM.DETALHES,
                       ITEM.UNIDADE,
                       INVENTARIO.VALOR,
                       INVENTARIO.QUANTIDADE
              )
  pivot
      (count(mes)
       for mes in ('JUNHO')
       )
order by 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
select * from (select unique
                to_char(INVENTARIO.competencia,'mm') mes,
                INVENTARIO.EMPRESA,
                INVENTARIO.DEPOSITO,
                INVENTARIO.ITEM "CÓDIGO ITEM",
                INVENTARIO.VERSAO,
                ITEM.DESCRICAO "DESCRICAO ITEM",
                VERSAOITEM.DETALHES "DETALHES ITEM",
                ITEM.UNIDADE,
                INVENTARIO.VALOR,
                INVENTARIO.QUANTIDADE
              from INVENTARIO, ITEM, VERSAOITEM
              where INVENTARIO.competencia = '1/06/13 00:00:00'
                and INVENTARIO.quantidade > 0
                and INVENTARIO.empresa in (1,2)
                and ITEM.tipo_item in (2,3)
                and ITEM.codigo = INVENTARIO.ITEM
                and INVENTARIO.item = VERSAOITEM.produto
                and INVENTARIO.versao = VERSAOITEM.VERSAO
                and ITEM.codigo = VERSAOITEM.produto
              group by INVENTARIO.competencia,
                       INVENTARIO.EMPRESA,
                       INVENTARIO.DEPOSITO,
                       INVENTARIO.ITEM,
                       INVENTARIO.VERSAO,
                       ITEM.DESCRICAO,
                       VERSAOITEM.DETALHES,
                       ITEM.UNIDADE,
                       INVENTARIO.VALOR,
                       INVENTARIO.QUANTIDADE
              )
  pivot
      (count(mes)
       for mes in ('JUNHO')
       ) ,
  pivot
      (SUM(VALOR)
       for mes in ('JUNHO')
       )       
order by 1

Não testei , nunca usei dois pivot numa sql, veja se funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta.

 

Então. Até funcionou os dois PIVOT (apenas retirei a virgula entre um e outro). Porém, mesmo que fazendo apenas um, não está trazendo a quantidade, está trazendo zerado. E a do valor, está trazendo 'null'.

 

É o que está dentro da função agregada "count" ou "sum" que diz o que será na coluna criada pelo pivot?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta como eu falei no #4 com os meses como número e o nome como "AS"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta.

Agora deu certo esta questão, de usar dois PIVOT e de apresentarem as Quantidades e Valores corretamente.

O unico problema é que ele apresenta mais de uma vez o mesmo item,trazendo a quantidade ainda por cada linha. Ou seja, Ele traz a quantidade de janeiro na coluna janeiro, e em outra linha a quantidade de fevereiro na coluna fevereiro, ainda trazendo mais de um item.

SELECT *
from (
SELECT unique
to_char(competencia,'mm') mesqtd,
to_char(competencia,'mm') mesvlr,
max(quantidade) qtd,
INVENTARIO.EMPRESA,
INVENTARIO.DEPOSITO,
INVENTARIO.ITEM "CÓDIGO ITEM",
INVENTARIO.VERSAO,
ITEM.DESCRICAO "DESCRICAO ITEM",
VERSAOITEM.DETALHES "DETALHES ITEM",
ITEM.UNIDADE,
ITEM.TIPO_ITEM,
MAX(INVENTARIO.VALOR) valor
FROM INVENTARIO, ITEM, VERSAOITEM
where to_char(competencia,'yyyy') = '2013'
and INVENTARIO.quantidade > 0
and INVENTARIO.empresa in (1,2)
and ITEM.tipo_item in (2,3,4,16)
and ITEM.codigo = INVENTARIO.ITEM
and INVENTARIO.item = VERSAOITEM.produto
and INVENTARIO.versao = VERSAOITEM.VERSAO
and ITEM.codigo = VERSAOITEM.produto
and INVENTARIO.item = '500038'
and INVENTARIO.versao = '57'
GROUP BY TO_CHAR(competencia,'mm'),
INVENTARIO.EMPRESA,
INVENTARIO.DEPOSITO,
INVENTARIO.ITEM,
INVENTARIO.VERSAO,
ITEM.DESCRICAO,
VERSAOITEM.DETALHES,
ITEM.UNIDADE,
ITEM.TIPO_ITEM
)
PIVOT (max(QTD)
FOR (mesqtd) IN ('01' AS JANEIRO, '02' AS FEVEREIRO, '03' AS MARCO, '03' AS ABRIL,
'05' AS MAIO, '06' AS JUNHO, '07' AS JULHO, '08' AS AGOSTO,
'09' AS SETEMBRO, '10' AS OUTUBRO, '11' AS NOVEMBRO, '12' AS DEZEMBRO))
pivot (MAX(valor) as valor
for (mesvlr) IN ('01' AS JANEIRO, '02' AS FEVEREIRO, '03' AS MARCO, '03' AS ABRIL,
'05' AS MAIO, '06' AS JUNHO, '07' AS JULHO, '08' AS AGOSTO,
'09' AS SETEMBRO, '10' AS OUTUBRO, '11' AS NOVEMBRO, '12' AS DEZEMBRO))
order by 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O unico problema é que ele apresenta mais de uma vez o mesmo item,trazendo a quantidade ainda por cada linha. Ou seja, Ele traz a quantidade de janeiro na coluna janeiro, e em outra linha a quantidade de fevereiro na coluna fevereiro, ainda trazendo mais de um item.

 

.. não entendi ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.