Luiz Fernando Posted February 22, 2015 Report Share Posted February 22, 2015 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 WelchDats 1 Quote Link to comment Share on other sites More sharing options...
Alexandre Bassanezi Posted February 22, 2015 Report Share Posted February 22, 2015 Luiz, Veja se isto te ajuda: SELECT C.grupo, C.nome, COUNT(1) FROM TABELA1 A, TABELA2 B, TABELA3 C WHERE A.produto = B.produto AND B.grupo = C.grupo GROUP BY C.grupo, C.nome ORDER BY C.nome Abs Alexandre Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted February 23, 2015 Author Report Share Posted February 23, 2015 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 Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted April 12, 2015 Author Report Share Posted April 12, 2015 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 Quote Link to comment Share on other sites More sharing options...
evandro Posted April 12, 2015 Report Share Posted April 12, 2015 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" Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted April 12, 2015 Author Report Share Posted April 12, 2015 Vlw Evandro deu certo ,achava que o LEFT JOIN era só para amarrar com a tabela principal, mais uma que aprendi... Obrigado Luiz Fernando Quote Link to comment Share on other sites More sharing options...
miragerr Posted April 13, 2015 Report Share Posted April 13, 2015 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. Luiz Fernando 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.