Ir para conteúdo
  • Cadastre-se

dev botao

SELECT DENTRO DE SELECT


Ver Solução Respondido por Rodrigo Cardilo,
  • Este tópico foi criado há 467 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Bom dia amigos,

Estou tentando montar uma consulta com as seguintes condições:

Tenho uma tabela com os campos : CODPRODUTO, DATA, TIPOMOV, DATA, QUANT e outra com os campos CODPRODUTO, CUSTO

A principio eu precisava do saldo do estoque e o valor total de custo em uma determinada data. Consegui usando o código abaixo:

 SELECT SUM(
     (COALESCE((SELECT SUM(M.QUANT) from UN05300 M where M.CODPRODUTO = F.CODPRODUTO
     AND M.TIPOMOV < 2000 AND M.DATA <= :DTESTOQUE),0) -
     COALESCE((SELECT SUM(M.QUANT) from UN05300 M where M.CODPRODUTO = F.CODPRODUTO
     AND M.TIPOMOV > 1999 AND M.DATA <= :DTESTOQUE),0)) * F.CUSTO)
     FROM UN05100 F

Porém eu precisava agora de um select que me retornasse o valor de um periodo de datas agrupado por dia com as colunas DATA E VALORTOTAL usando o código acima.

Alguém já passou por isso? Já tentei JOIN's de todos os tipos mas não obtive sucesso.

 

Grato desde jáo em uma determinada data. Consegui usando o código abaixo:

Rodrigo Cardilo

Card System Info

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa noite,

Acredito que este código ou algo próximo a isso lhe atenda.

SELECT 
  (SUM(
    CASE WHEN M.TIPOMOV < 2000 THEN M.QUANT ELSE 0 END -
    CASE WHEN M.TIPOMOV > 1999 THEN M.QUANT ELSE 0 END ) *
    F.CUSTO ) AS VALORTOTAL,
  M.DATA,
  F.CODPRODUTO
  FROM UN05100 F
  LEFT JOIN UN05300 M ON M.CODPRODUTO = F.CODPRODUTO
  WHERE M.DATA BETWEEN :DTESTOQUEINI AND :DTESTOQUEFIM
GROUP BY
  M.DATA, F.CODPRODUTO, F.CUSTO

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
13 horas atrás, Renato Rubinho disse:

Boa noite,

Acredito que este código ou algo próximo a isso lhe atenda.

SELECT 
  (SUM(
    CASE WHEN M.TIPOMOV < 2000 THEN M.QUANT ELSE 0 END -
    CASE WHEN M.TIPOMOV > 1999 THEN M.QUANT ELSE 0 END ) *
    F.CUSTO ) AS VALORTOTAL,
  M.DATA,
  F.CODPRODUTO
  FROM UN05100 F
  LEFT JOIN UN05300 M ON M.CODPRODUTO = F.CODPRODUTO
  WHERE M.DATA BETWEEN :DTESTOQUEINI AND :DTESTOQUEFIM
GROUP BY
  M.DATA, F.CODPRODUTO, F.CUSTO

 

Amigo @Renato Rubinho, na verdade eu preciso de um select que junte o meu select acima mencionado (que é o total de venda por dia) ao outro pra pegar o valor por um periodo como o exemplo abaixo:

DATA                  VALOR

01/01/2023        100,00

02/01/2023        2000,00

03/01/2023        800,00

O valor por dia eu já consigo pelo meu select porém quero um select unico que me retorne da forma menciona.

O Group by seria o campo DATA

Mesmo assim grato pela ajuda.

Rodrigo Cardilo

Card System Info

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Consultores

Certo, 

Se colocar meu outro select como subselect totalizando o valor e agrupando por data não resolve?

SELECT
  SUM(VALORTOTAL),
  DATA
FROM(
SELECT 
  (SUM(
    CASE WHEN M.TIPOMOV < 2000 THEN M.QUANT ELSE 0 END -
    CASE WHEN M.TIPOMOV > 1999 THEN M.QUANT ELSE 0 END ) *
    F.CUSTO ) AS VALORTOTAL,
  M.DATA,
  F.CODPRODUTO
  FROM UN05100 F
  LEFT JOIN UN05300 M ON M.CODPRODUTO = F.CODPRODUTO
  WHERE M.DATA BETWEEN :DTESTOQUEINI AND :DTESTOQUEFIM
GROUP BY
  M.DATA, F.CODPRODUTO, F.CUSTO
)
GROUP BY DATA

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
  • Solution
Em 12/01/2023 at 13:24, Renato Rubinho disse:

Certo, 

Se colocar meu outro select como subselect totalizando o valor e agrupando por data não resolve?

SELECT
  SUM(VALORTOTAL),
  DATA
FROM(
SELECT 
  (SUM(
    CASE WHEN M.TIPOMOV < 2000 THEN M.QUANT ELSE 0 END -
    CASE WHEN M.TIPOMOV > 1999 THEN M.QUANT ELSE 0 END ) *
    F.CUSTO ) AS VALORTOTAL,
  M.DATA,
  F.CODPRODUTO
  FROM UN05100 F
  LEFT JOIN UN05300 M ON M.CODPRODUTO = F.CODPRODUTO
  WHERE M.DATA BETWEEN :DTESTOQUEINI AND :DTESTOQUEFIM
GROUP BY
  M.DATA, F.CODPRODUTO, F.CUSTO
)
GROUP BY DATA

 

Oi @Renato Rubinho. Na verdade o valor do estoque do dia eu já tenho o sql pronto, conforme mostrei no primeiro post. Eu precisa juntar aquele select que já funciona a outro com um periodo de datas. Suas dicas não deram certo, mas fiz de outra forma, dentro do próprio delphi pegando o valor de cada data que eu precisava. Agradeço a disponiblidade

 

  • Curtir 2

Rodrigo Cardilo

Card System Info

[email protected]

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 467 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.