Ir para conteúdo

POWERED BY:

Arquivado

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

Faccruz

Como montar essa SQL

Recommended Posts

Boa tarde, tenho uma dúvida em relação a montagem de uma SQL para exibir o seguinte relatório.

Loja - Todos os Dados - A Vista - Contratos - Pedidos Anteriores - Pedidos Atuais - Diferença

L01 - 2525,00 - 25,00 - 2500,00 - 0,00 - 0,00 - 0,00

L02 - 1300,00 - 0,00 - 1325,00 - 25,00 - 0,00 - 0,00

 

Algumas particularidades:

 

1 - Os A vista e Contratos são apenas os faturados do mês informado

2 - Todos os dados não faz diferença entre os faturados e não faturados

3 - Pedidos Anteriores: São os vendidos no mês anterior e faturados no mês atual

4 - Pedidos Atuais: São os faturados e vendidos no mês atual

5 - A diferença é calculada da seguinte forma:

(A Vista + Contratados) - Todos - Pedidos Anteriores + Pedidos Atuais

 

Alguem poderia me dar uma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cheguei em uma SQL dessa forma, mas acredito que tenha um jeito mais fácil.

 

select C.LOJA,
       nvl(sum(C.VlrCurso), 0) Oracle,
       nvl((SELECT SUM(VLRCURSO)
             FROM CYBELAR_CRESCABR
            WHERE FATURADO = 'S'
              AND TO_CHAR(DTVENDA, 'MM/YYYY') = '10/2009'
              AND LENGTH(CONTRATO) < 9
              AND C.LOJA = LOJA
            GROUP BY LOJA),
           0) VV,
       nvl((SELECT SUM(VLRCURSO)
             FROM CYBELAR_CRESCABR
            WHERE FATURADO = 'S'
              AND TO_CHAR(DTVENDA, 'MM/YYYY') = '10/2009'
              AND LENGTH(CONTRATO) >= 9
              AND C.LOJA = LOJA
            GROUP BY LOJA),
           0) CONTRATOS,
       nvl((SELECT SUM(VLRCURSO)
             FROM CYBELAR_CRESCABR
            WHERE FATURADO = 'N'
              AND TO_CHAR(DTVENDA, 'MM/YYYY') = '09/2009'
              AND C.LOJA = LOJA
            GROUP BY LOJA),
           0) PEDIDOS_ANTIGOS,
       nvl((SELECT SUM(VLRCURSO)
             FROM CYBELAR_CRESCABR
            WHERE FATURADO = 'N'
              AND TO_CHAR(DTVENDA, 'MM/YYYY') = '10/2009'
              AND C.LOJA = LOJA
            GROUP BY LOJA),
           0) PEDIDOS_ATUAIS,
       (((SELECT SUM(VLRCURSO)
            FROM CYBELAR_CRESCABR
           WHERE FATURADO = 'S'
             AND TO_CHAR(DTVENDA, 'MM/YYYY') = '10/2009'
             AND LENGTH(CONTRATO) < 9
             AND C.LOJA = LOJA
           GROUP BY LOJA) +
       (SELECT SUM(VLRCURSO)
            FROM CYBELAR_CRESCABR
           WHERE FATURADO = 'S'
             AND TO_CHAR(DTVENDA, 'MM/YYYY') = '10/2009'
             AND LENGTH(CONTRATO) >= 9
             AND C.LOJA = LOJA
           GROUP BY LOJA)) - SUM(C.VLRCURSO) -
       (SELECT SUM(VLRCURSO)
           FROM CYBELAR_CRESCABR
          WHERE FATURADO = 'N'
            AND TO_CHAR(DTVENDA, 'MM/YYYY') = '09/2009'
            AND C.LOJA = LOJA
          GROUP BY LOJA) + (SELECT SUM(VLRCURSO)
                               FROM CYBELAR_CRESCABR
                              WHERE FATURADO = 'N'
                                AND TO_CHAR(DTVENDA, 'MM/YYYY') = '10/2009'
                                AND C.LOJA = LOJA
                              GROUP BY LOJA)) CONFERENCIA
  from cybelar_crescabr C
 where Faturado = 'S'
   and to_char(dtvenda, 'MM/yyyy') = '10/2009'
 group by Loja
 ORDER BY LOJA

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê uma pesquisada na claúsula CASE, ela resolve melhor este tipo de problema.

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.