Jump to content
Fivewin Brasil

Ajuda com SELECT


Luiz Fernando

Recommended Posts

Pessoal sera que seria possivel fazer um SELECT na tabela 1, usando um ORDER BY e GROUP BY com um campo da tabela 3, porque a tabela 1 só tem vinculo com a tabela 2 e esta por sua vez tem ligação com tabela 3, preciso obter um relatorio de vendas por grupo sintético

TABELA 1

========

pedido varchar(9)

produto varchar(6)

TABELA 2

========

produto varchar(6)

descricao varchar(40)

grupo varchar(3)

TABELA 3

========

grupo varchar(3)

nome varchar(20)

Obrigado

Luiz Fernando

Link to comment
Share on other sites

Vlw Alexandre muito obrigado pela ajuda, funcionou 100%

cSql="SELECT g.codigo,sum(v.qtd*v.valor),count(g.codigo),g.nome,'','','',''"
cSql+=" FROM pedido as v, produto as p, grupo as g"
cSql+=" WHERE v.produto = p.codigo AND p.grupo = g.codigo"
cSql+=" AND v.data >= "+Any2Sql(cGet[1])
cSql+=" AND v.data <= "+Any2Sql(cGet[2])
cSql+=" AND v.tipo='1'"
cSql+=" GROUP BY g.codigo"
cSql+=" ORDER BY g.codigo"

Luiz Fernando

Link to comment
Share on other sites

  • 1 month later...

Colegas o código abaixo funciona perfeito, só que tem um detalhe,se algum produto tiver sem conteúdo no campo p.grupo ele não exibe, sera que usando a logica abaixo teria como contornar isto.

cSql="SELECT g.codigo,sum(v.qtd*v.valor),count(g.codigo),g.nome,'','','',''"
cSql+=" FROM pedido as v, produto as p, grupo as g"
cSql+=" WHERE v.produto = p.codigo AND p.grupo = g.codigo"
cSql+=" AND v.data >= "+Any2Sql(cGet[1])
cSql+=" AND v.data <= "+Any2Sql(cGet[2])
cSql+=" AND v.tipo='1'"
cSql+=" GROUP BY g.codigo"
cSql+=" ORDER BY g.codigo"

Obrigado

Link to comment
Share on other sites

Olá,

Quando você usa as tabelas apenas por vírgula, está implícito o "inner join". A solução é mudar para "left join".

Ficaria assim:

cSql="SELECT g.codigo,sum(v.qtd*v.valor),count(g.codigo),g.nome,'','','',''"
cSql+=" FROM pedido as v
cSql+=" left join produto as p on v.produto = p.codigo "
cSql+=" left join grupo as g on p.grupo = g.codigo "
cSql+=" WHERE v.data >= "+Any2Sql(cGet[1])
cSql+=" AND v.data <= "+Any2Sql(cGet[2])
cSql+=" AND v.tipo='1'"
cSql+=" GROUP BY g.codigo"
cSql+=" ORDER BY g.codigo"
Link to comment
Share on other sites

Ola amigos

Vejo que se coloca um ORDER BY sem necessidade por o GROUP BY já faz esta função, você só usaria o ORDER BY se for uma ordem diferente do GROUP BY.

Então não a necessidade de colocar um ORDER BY g.codigo se o GROUP BY g.codigo ja fará isso pra você.

É só uma critica construtiva.

Espero ter ajudado.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...