AJUDA COM SQL

CAIO.FR.SP 25/07/2012 22:06:47
#406606
galera, preciso da ajuda de vocês pra montar uma consulta sql.

tenho uma tela, onde preciso preencher uma lista com dados de 3 tabelas:

tabela orcamento
cod_orcamento pk
data_cadastro
cod_cliente fk

tabela clientes
cod_cliente pk
nome

tabela orcamento_produtos
cod_orcamento fk
cod_produto fk
quantidade
valor_unitario

preciso que na grade apareça assim

código | data | cliente | valor
00001 25/07/2012 CAIO 1,00

consegui realizar o inner join para pegar o nome do cliente, mas estou com dificuldade pra monta a na consulta a função que busque todos os produtos ta tabela orcamento_produtos relacionados com o orçamento, e devolva o valor da soma dos mesmo.

alguém pode me da uma força ai.
ADHEL 26/07/2012 08:43:03
#406616
Tenta aí

select o.cod_orcamento,o.data_cadastro,c.nome,sum(op.valor_unitario) from orcamento o,clientes c,orcamentos_produtos op where o.cod_orcamento=op.cod_orcamento and o.cod_cliente=c.cod_cliente group by op.cod_orcamento
CAIO.FR.SP 26/07/2012 11:45:15
#406632
ADHEL, não deu certo, retorna o erro -2147217887 - você tentou executar uma consulta que não inclui a expressão [ô]COD_ORCAMENTO[ô] especificada como parte de uma função agregada.

tentei assim:
SELECT orcamentos.cod_orcamento, orcamentos.data_cadastro, clientes.nome, SUM(orcamentos_produtos.quantidade * orcamentos_produtos.valor_unitario) AS TOTAL 
FROM ((orcamentos
INNER JOIN clientes ON orcamentos.cod_cliente = clientes.cod_cliente)
INNER JOIN orcamentos_produtos ON orcamentos.cod_orcamento = orcamentos_produtos.cod_orcamento)
WHERE orcamentos.excluido = 0
ORDER BY orcamentos.cod_orcamento ASC


e retorna o mesmo erro.
CAIO.FR.SP 26/07/2012 11:51:05
#406633
estranho que com essa consulta minha, se eu retirar a parte
[ô]SUM(orcamentos_detalhes.quantidade * orcamentos_detalhes.valor_unitario) AS TOTAL[ô]
, ela funciona, entao o problema esta nela, mas qual o problema?
ADHEL 26/07/2012 12:11:47
#406637
Desculpe nao entendi
Pensava que voce queria o total do orçamento.
tem como explicar mais detalhadamente o que voce necessita.
Se possivel coloca um exemplo como voce fez la em cima ,só que dessa vez com mais de um item
CAIO.FR.SP 26/07/2012 14:29:58
#406652
ADHEL, é exatamente o valor do orçamento que preciso.

como na tabela orcamento nao fica gravado o valor do mesmo, preciso que a consulta some o valor dos itens cadastrados vezes a quantidade desse item.
exemplo:

tabela orcamento
codigo cliente data
00001 caio... 26/07/2012

tabela orcamento_produtos
orcamento produto quantidade valor
00001 00005 2 5.00

entao a consulta tem que preencher a grade assim:

código | data | cliente | valor
00001 26/07/2012 CAIO 10,00
CAIO.FR.SP 26/07/2012 16:52:18
#406663
resolvido.

SELECT O.COD_ORCAMENTO, O.DATA_CADASTRO, C.NOME_RAZAO, 
(SELECT SUM(OD.QUANTIDADE * OD.VALOR_UNITARIO)
FROM ORCAMENTOS_DETALHES OD
WHERE COD_ORCAMENTO = O.COD_ORCAMENTO) AS TOTAL
FROM ORCAMENTOS O
INNER JOIN CONTATOS C ON O.COD_CONTATO = C.COD_CONTATO
SURICAT 26/07/2012 16:57:06
#406665
subselect feito dentro do próprio select?

prefiro utilizar o subselect dentro do From, deixa o código mais organizado, assim também funcionou nos testes aqui:
  select distinct orc.cod_orcamento, orc.data_cadastro, con.nome_razao, soma.total
from orcamentos orc
inner join orcamentos_detalhes orcd on orc.cod_orcamento = orcd.cod_orcamento
inner join (
select _orc.cod_orcamento, sum(_orcd.quantidade * _orcd.valor_unitario) total
from orcamentos _orc
inner join orcamentos_detalhes _orcd on _orc.cod_orcamento = _orcd.cod_orcamento
group by _orc.cod_orcamento
)soma on soma.cod_orcamento = orc.cod_orcamento
left join contatos con on con.cod_contato = orc.cod_contato

CAIO.FR.SP 26/07/2012 16:58:47
#406666
Galera, qual vocês acham que ficou melhor?
Tópico encerrado , respostas não são mais permitidas