nicolasbraz Postado Agosto 2, 2012 Denunciar Share Postado Agosto 2, 2012 (editado) Estou precisando fazer uma consulta em 3 tabelas para gerar orçamento, eu preciso que saia assim. http://imageshack.us/photo/my-images/404/95745624.jpg/Mas ele está saindo assim. http://imageshack.us/photo/my-images/829/saindo.jpg/Como podem ver ele duplica os itens era para mostrar só 1x o item 1.02 e ele mostra 3x. Se fosse só 2 tabelas eu consigo fazer sair certo só que eu preciso das 3, eu estou usando o seguinte código. select DISTINCT ORCAPAI_CODIGO ORCAITEM_DESCRICAO, ORCAITEM_ITEM, ORCAITEM_SUBTOTAL, ORCAITEM_CODIGO_ORCA_PAI, ORSER_CODIGO_ORCA_PAI, SER_CODIGO, ORSER_ITEM, ORSER_PRECO_MAO_OBRA, ORSER_PRECO_MAO_OBRA_TOTAL, ORSER_PRECO_MATERIAL, ORSER_PRECO_MATERIAL_TOTAL, ORSER_QUANTIDADE,ORSER_UNIDADE, ORSER_VALOR_TOTAL from ORCA_SERVICO, ORCA_ITEM, ORCA_PAI where ORCAITEM_CODIGO_ORCA_PAI = ORCAPAI_CODIGO and ORSER_CODIGO_ORCA_PAI = ORCAPAI_CODIGO order by orser_item Editado Agosto 6, 2012 por nicolasbraz Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Agosto 3, 2012 Denunciar Share Postado Agosto 3, 2012 Cláusula Distinct no SQLApós a lista de seleção ser processada, a tabela resultante pode opcionalmente estar sujeita à remoção das linhas duplicadas. A palavra chave DISTINCT deve ser escrita logo após o SELECT para especificar esta funcionalidadeSELECT DISTINCT lista_de_seleção ...(Em vez de DISTINCT pode ser utilizada a palavra ALL para especificar o comportamento padrão de manter todas as linhas)Como é óbvio, duas linhas são consideradas distintas quando têm pelo menos uma coluna diferente. Os valores nulos são considerados iguais nesta comparação.Como alternativa, uma expressão arbitrária pode determinar quais linhas devem ser consideradas distintas:SELECT DISTINCT ON (expressão [, expressão ...]) lista_de_seleção ...Neste caso, expressão é uma expressão de valor arbitrária avaliada para todas as linhas. Um conjunto de linhas para as quais todas as expressões são iguais são consideradas duplicadas, e somente a primeira linha do conjunto é mantida na saída. Deve ser observado que a “primeira linha” de um conjunto é imprevisível, a não ser que a consulta seja ordenada por um número suficiente de colunas para garantir a ordem única das linhas que chegam no filtro DISTINCT (o processamento de DISTINCT ON ocorre após a ordenação do ORDER BY).A cláusula DISTINCT ON não faz parte do padrão SQL, sendo algumas vezes considerada um estilo ruim devido à natureza potencialmente indeterminada de seus resultados. Utilizando-se adequadamente GROUP BY e subconsultas no FROM esta construção pode ser evitada, mas geralmente é a alternativa mais fácil.Em Resumo: duas linhas são consideradas distintas quando têm pelo menos uma coluna diferente. Os valores nulos são considerados iguais nesta comparação.Assim sendo :select DISTINCT ORCAPAI_CODIGO ORCAITEM_DESCRICAO, ORCAITEM_ITEM, ORCAITEM_SUBTOTAL, ORCAITEM_CODIGO_ORCA_PAI, ORSER_CODIGO_ORCA_PAI, SER_CODIGO, ORSER_ITEM, ORSER_PRECO_MAO_OBRA, ORSER_PRECO_MAO_OBRA_TOTAL, ORSER_PRECO_MATERIAL, ORSER_PRECO_MATERIAL_TOTAL, ORSER_QUANTIDADE,ORSER_UNIDADE, ORSER_VALOR_TOTAL from ORCA_SERVICO, ORCA_ITEM, ORCA_PAI where ORCAITEM_CODIGO_ORCA_PAI = ORCAPAI_CODIGO and ORSER_CODIGO_ORCA_PAI = ORCAPAI_CODIGO order by orser_itemO seu select retorna 3 valores iguais como resultado da união de 3 tabelas, onde pelo menos um dos campos selecionados tem valor diferenteuma maneira de contornar esse problema, seria na hora de montar o relatorio, utilizar a banda GROUP HEADERcolocando na propriedade Expression o campo delimitador ( ex: ORCAITEM_ITEM ) isso faz com que somente o item não duplicado apareçaexemplohttp://limanetoinfo.blogspot.com.br/2009/0...uickreport.htmltutorial em ingleshttp://delphi.about.com/library/bluc/text/uc051701f.htmabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nicolasbraz Postado Agosto 6, 2012 Autor Denunciar Share Postado Agosto 6, 2012 Eu resolvi tirar o Distinct até porque ele não estava causando mudança alguma em meu SQL, eu entendi o porque o código está duplicando porém eu não consigo enxergar um outro código SQL para resolver o meu problema! Sobre o QuickReport eu vi os links que você me passou e coloquei o QrExpression como o ORCAITEM_ITEM e também setei a band detail como linkband da GroupHeader. E agora ele está saindo assim. http://imageshack.us/photo/my-images/215/relatoriod.jpg/Ele está reconhecendo o ORCAITEM_ITEM como group header só que ele coloca 1 item por grupo! Estava pensando se eu não devo criar uma chave estrangeira na tabela de serviço, onde ela reconheceria que se o item que eu estou cadastrando começa com 1 ele preenche o campo com 1.00 sendo assim referente ao item (da tabela de item) 1.00. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 nicolasbraz Postado Agosto 6, 2012 Autor Denunciar Share Postado Agosto 6, 2012 Resolvi criando uma chave estrangeira! Agora minha tabela de serviços tem um campo ORCAITEM_ITEM e ele tem o mesmo valor do ORCAITEM_ITEM da tabela de item. Obrigado pela ajuda Jonas. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
nicolasbraz
Estou precisando fazer uma consulta em 3 tabelas para gerar orçamento, eu preciso que saia assim.
http://imageshack.us/photo/my-images/404/95745624.jpg/
Mas ele está saindo assim.
http://imageshack.us/photo/my-images/829/saindo.jpg/
Como podem ver ele duplica os itens era para mostrar só 1x o item 1.02 e ele mostra 3x.
Se fosse só 2 tabelas eu consigo fazer sair certo só que eu preciso das 3, eu estou usando o seguinte código.
Editado por nicolasbrazLink para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.