Ir para conteúdo

POWERED BY:

Arquivado

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

flavioavilela

[Resolvido] consulta sql

Recommended Posts

bom dia a todos...

estou tentando fazer uma consulta sql usando inner join, como nosso amigo aqui no forum Chrnos me auxiliou antes... só que, andei pesquisando sobre novos meios de formar um inner join, mas, nao estou obtendo sucesso... essas outras formas busquei aqui mesmo no forum..... alguém pode me dar uma luz???

 

estou querendo fazer uma consulta que, o usuário informa um periodo de data e o sistema joga o nome do funcionário, vai na tabela de itens_metas e verifica qual é a meta daquele funcionário e verifica na tabela definicao_metas qual o mes que é para ser verificado. ai, no final ele soma a quantidade de produtos que ele vendeu nesse periodo e soma também o sub_total de cada venda nesse periodo e divide pelo número de dias úteis que já é trazido na EdtDias_Uteis... segue abaixo o código...

 

select V.Funcionario, IDM.Meta, sum(IV.Quantidade) as QTDE, sum(IV.Sub_total) as ST, (sum(IV.Quantidade) / :DiasQTDE) as DIVQTDE, (sum(IV.Sub_Total) / :DiasVALOR) as DIVDIAS from Venda V
inner join Itens_Definicao_Metas IDM inner join Itens_Venda IV inner join Definicao_Metas DM
on (IDM.Funcionario = V.Funcionario) on (IDM.Codigo = DM.Codigo) on (V.N_Pedido = IV.N_Pedido)
where V.Data_Pedido between :Data_Inicial and :Data_Final group by V.Funcionario, IDM.Meta, IV.Quantidade, IV.Sub_Total
ele sempre me retorna uma msg falando que 'O identificador de várias partes '' nao pode ser vinculado'...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim:

 

select	V.Funcionario, IDM.Meta, sum(IV.Quantidade) as QTDE, 
		sum(IV.Sub_total) as ST, (sum(IV.Quantidade) / :DiasQTDE) as DIVQTDE, 
	   (sum(IV.Sub_Total) / :DiasVALOR) as DIVDIAS 
from Venda V
inner join Itens_Venda IV  on (V.N_Pedido = IV.N_Pedido)
inner join Itens_Definicao_Metas IDM on (IDM.Funcionario = V.Funcionario)
inner join Definicao_Metas DM on (IDM.Codigo = DM.Codigo)
where V.Data_Pedido between :Data_Inicial and :Data_Final 
group by V.Funcionario, IDM.Meta

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehe... vlw amigo, eu quase consegui fazer... eu havia feito dessa forma, só tinha imbananado no segundo inner join... obrigado pela ajuda... só tem um problema, acho que é na hora do inner join tb... a query conecta beleza, só que, não aparece dados nenhum no dbgrid... aparece só o nome na coluna em cima do dbgrid mas o dados nao vem... oq pode ser? minha sql que está errada mesmo???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teria que testar direto no BD para ver se ela retorna informações ou se tem algum erro de sintaxe... e outra coisa: se alguma das tabelas usadas no inner não contiver dado algum zera a consulta. Nesses casos, usa-se o LEFT JOIN caso não seja obrigado que os dados estejam com um registro válido na tabela em questão.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

funcionou rsrsrs... o lance era que na minha tabela de Itens_definicao_metas eu tava salvando o funcionário com o código, mas é com o nome né, ai da pau.... mas, outra coisa rsrsrs (desculpe as perguntas), é que, apareceu os dados do funcionário Flávio (só tem ele lançado nas vendas) entao, aparece ele 4 vezes, que são as quatro vendas que ele fez... eu queria aparecer ele 1 vez só.... deve ser fácil pra qm sabe rsrs....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está o select? Geralmente esse tipo de situação ocorre por causa da forma como está agrupando os dados.... mostra também como está o retorno dele para poder visualizar como está o retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

with dm.qryacompanhamento_metas do

begin

close;

sql.Clear;

sql.Add('select V.Funcionario, IDM.Meta, sum(IV.Quantidade) as QTDE, sum(IV.Sub_total) as ST, (sum(IV.Quantidade) / :DiasQTDE) as DIVQTDE, (sum(IV.Sub_Total) / :DiasVALOR) as DIVDIAS from Venda V');

sql.add('inner join Itens_Venda IV on (V.N_Pedido = IV.N_Pedido)');

sql.add('inner join Itens_Definicao_Metas IDM on (IDM.Funcionario = V.Funcionario)');

sql.add('inner join Definicao_Metas DM on (IDM.Codigo = DM.Codigo)');

sql.add('where V.Data_Pedido between :Data_Inicial and :Data_Final group by V.Funcionario, IDM.Meta, IV.Quantidade, IV.Sub_Total');

Parameters.ParamByName('Data_Inicial').Value:= StrToDateTime(MEdtPeriodo_Inicial.Text);

Parameters.ParamByName('Data_Final').Value:= StrToDateTime(MEdtPeriodo_Final.Text);

Parameters.ParamByName('DiasQTDE').Value:= StrToInt(EdtDias_Uteis.Text);

Parameters.ParamByName('DiasVALOR').Value:= StrToInt(EdtDias_Uteis.Text);

open;

end;

está é minha select inteira...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está o retorno dela? O que mostra no grid?

Compartilhar este post


Link para o post
Compartilhar em outros sites

aparece 4 vezes o nome do funcionário Flávio com suas quantidades e seus sub_totais.. que foram os campos que eu pedi pra somar... mas, na realidade eu queria que aparecesse, como é o funcionário Flávio nas 4 linhas que aparece, aparecer só um né, claro... se fosse 3 Fernando, 5 João, aparecesse só 1 Fernando com seus campos e 1 João com seus campos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Retire do group by os campos IV.Quantidade, IV.Sub_Total e teste novamente.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

certinho... agora sim, apareceu só um.... só que rsrs, desculpe, mais uma vez ocorreu um errinho..... eu tenho lançado nas vendas aqui, o funcionário Flávio e o funcionário Mario José.... apareceu pra mim somente os dados do Flávio, com sua meta, oq ele já tinha feito e tudo mais... até conferi na calculadora e no BD e está tudo ok.... já o Mario José nao apareceu a linha dele com as suas respectivas metas, quantidades e etc.........

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Mario José tem dados gravados nas 3 tabelas envolvidas no select?

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe pela minha estupidez meu amigo rsrsrs... eu tenho dois funcionários aqui o João e o João da Silva... numa tabela estava o João e outra o João da Silva rsrsrs.... hj estou tão atarefado que nem prestei atenção nesse detalhe, mas, graças a você, resolvi meu problema... mto obrigado meu amigo... vlw demais

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.