Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) DUVIDA


blood

Pergunta

sei que os join comparam duas tabelas. colocando assim ele da erro

como posso colocar isso para funcionar?

é uma tabela de consumo dos produtos, preciso desse consumo de 45 dias e um campodo lado com 90 dias

a tabela com apenas 45 dias eu consegui, colocar as dus juntas que fica complicado

SELECT 
P.Produtos_CDProduto AS CODIGO, 
PR.NMproduto AS PRODUTO, 
sum(P.Produtos_NRQtd) AS CONSUMO45
            
FROM 

SQLUser.CESproduto PR
LEFT OUTER JOIN SQLUser.VENVenda V ON ( V.DTEmissao = (CURRENT_DATE-45) )
LEFT OUTER JOIN VENVenda_Produtos P ON ( P.Produtos_CDProduto = PR.CDproduto AND P.VENVenda = V.ID )
            
GROUP BY P.Produtos_CDProduto
ORDER BY PR.NMPRODUTO

esse é o erro que retorna

[%msg: < SQL ERROR #94: Unsupported usage of OUTER JOIN.>], SQL state S1000 in SQLExecDirect in C:\Program Files\xampp\htdocs\t.php on line 23

Editado por Denis Courcy
Melhorar título para pesquisa
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'blood'!

Vamos corrigir o conceito. Você disse:

sei que os join comparam duas tabelas
O correto é "Joins ligam duas tabelas"

como posso colocar isso para funcionar?

é uma tabela de consumo dos produtos, preciso desse consumo de 45 dias e um campodo lado com 90 dias

a tabela com apenas 45 dias eu consegui, colocar as dus juntas que fica complicado

O erro estava no uso incorreto da comparação do join.

Veja se assim funciona:

SELECT P.Produtos_CDProduto AS CODIGO, PR.NMproduto AS PRODUTO, 
   sum(P.Produtos_NRQtd) AS CONSUMO45
FROM SQLUser.CESproduto PR
LEFT OUTER JOIN VENVenda_Produtos P ON P.Produtos_CDProduto = PR.Cdproduto
LEFT OUTER JOIN SQLUser.VENVenda V ON V.ID = P.VENVenda
WHERE V.DTEmissao = (CURRENT_DATE-45)
GROUP BY P.Produtos_CDProduto
ORDER BY PR.NMPRODUTO

Link para o comentário
Compartilhar em outros sites

  • 0

sim, assim funciona

foi desse jeito que consegui fazer a tabela de 45 dias

mas eu precisava colocar do lado a de 90 dias

e limitando direto no WHERE, não consigo colocar também um (CURRENT_DATE-90)

por isso precisava algo parecido com o join

Link para o comentário
Compartilhar em outros sites

  • 0

por isso tentei fazer assim, mas não é possível colocar a data ali no join

SELECT 
            P.Produtos_CDProduto AS CODIGO, 
            PR.NMproduto AS PRODUTO, 
            sum(P.Produtos_NRQtd) AS CONSUMO45,
            sum(P.Produtos_NRQtd) AS CONSUMO90
            
            FROM 

            SQLUser.CESproduto PR
            LEFT OUTER JOIN SQLUser.VENVenda V ON ( V.DTEmissao <= (CURRENT_DATE-45) )
            LEFT OUTER JOIN VENVenda_Produtos P ON ( P.Produtos_CDProduto = PR.CDproduto AND P.VENVenda = V.ID )
            
            LEFT OUTER JOIN SQLUser.VENVenda V2 ON ( V2.DTEmissao <= (CURRENT_DATE-90) )
            LEFT OUTER JOIN VENVenda_Produtos P2 ON ( P2.Produtos_CDProduto = PR.CDproduto AND P2.VENVenda = V2.ID )
            
            GROUP BY PP.Produtos_CDProduto, P.Produto_CDProduto
            ORDER BY PR.NMPRODUTO

Editado por blood
Link para o comentário
Compartilhar em outros sites

  • 0

'blood',

Então o que você precisa é uma resposta parecida com a que dei para o 'BetoGroo'.

Veja se assim funciona, pois eu não testei.

SELECT P.Produtos_CDProduto AS CODIGO, PR.NMproduto AS PRODUTO, 
   sum(IF(V.DTEmissao = (CURRENT_DATE-45), P.Produtos_NRQtd, 0) AS CONSUMO45,
   sum(IF(V.DTEmissao = (CURRENT_DATE-90), P.Produtos_NRQtd, 0) AS CONSUMO90
FROM SQLUser.CESproduto PR
LEFT OUTER JOIN VENVenda_Produtos P ON P.Produtos_CDProduto = PR.Cdproduto
LEFT OUTER JOIN SQLUser.VENVenda V ON V.ID = P.VENVenda
GROUP BY P.Produtos_CDProduto
ORDER BY PR.NMPRODUTO

Link para o comentário
Compartilhar em outros sites

  • 0

funcionou

obrigado, amigo

na verdade, meu banco é Caché, acho que não tem essa função IF

mas como é mais difícil ser respondido no outro fórum resolvi postar aqui

usei outra função

SELECT 
            P.Produtos_CDProduto AS CODIGO, 
            PR.NMproduto AS PRODUTO, 
            sum(CASE WHEN V.DTEmissao <= (CURRENT_DATE-45) THEN P.Produtos_NRQtd ELSE 0 END) AS CONSUMO45,
            sum(CASE WHEN V.DTEmissao <= (CURRENT_DATE-90) THEN P.Produtos_NRQtd ELSE 0 END)  AS CONSUMO90
            FROM 
            
            SQLUser.CESproduto PR
            LEFT OUTER JOIN VENVenda_Produtos P ON ( P.Produtos_CDProduto = PR.Cdproduto )
            LEFT OUTER JOIN SQLUser.VENVenda V ON ( V.ID = P.VENVenda )
            
            GROUP BY P.Produtos_CDProduto
            ORDER BY PR.NMPRODUTO

Aqui parece que deu certo

Obrigado

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...