Problemas com subConsultas
Ola alguém que manja pode dar uma força tenho que fazer essas consultas?
Tenhos as seguintes tabelas galera?
Cliente | Item_Pedido |
Cod_cliente (num,5) (PK) | Num_pedido (FK) PK |
Nome_cliente (alfa,30) | Cod_produto (FK) |
Endereco (alfa,25) | Quantidade num(5) |
Cidade (alfa,20) | |
Cep (alfa,10) | |
UF (alfa,2) | |
------------------------------------------|------------------------------------------------------------------------------------------------------- |
Produto | Pedido | Vendedor |
Cod_produto (num,3) (PK) | Num_pedido (num,3) (P.K) | Cod_vendedor (num,3) (PK) |
Descricao (alfa,20) | Prazo_entrega (data) | Nome_vendedor (alfa,30) |
Unidade (alfa,2) | Cod_cliente (FK) | Faixa_comissao (num(4,2) ) |
Valor_unitario (num(6,2)) | Cod_vendedor (FK) | Salario_fixo (num(7,2)) |
--------------------------------------------------------------------------------------------------------------------------------------------------
E as seguintes consultas para realizar?
Quais os clientes que só compraram com o vendedor com codigo 10 e com mais nenhum outro vendedor (fidelidade).
Quais vendedores não fizeram mais de 5 pedidos.
Quais os vendedores não fizeram nenhum pedido no mês de maio/2007
Listar o nome do vendedor que mais fez pedidos.
Listar o nome dos clientes e o número total de pedidos associados a cada cliente em ordem decrescente de vendas, isto é do que mais tem pedidos para o que menos tem.
Excluir todos os itens dos pedidos feitos pelo cliente de código =2;
Alterar o valor unitário de todos os produtos sem vendas no ano de 2007 para menos 20%.
muito obrigado miller.
Tenhos as seguintes tabelas galera?
Cliente | Item_Pedido |
Cod_cliente (num,5) (PK) | Num_pedido (FK) PK |
Nome_cliente (alfa,30) | Cod_produto (FK) |
Endereco (alfa,25) | Quantidade num(5) |
Cidade (alfa,20) | |
Cep (alfa,10) | |
UF (alfa,2) | |
------------------------------------------|------------------------------------------------------------------------------------------------------- |
Produto | Pedido | Vendedor |
Cod_produto (num,3) (PK) | Num_pedido (num,3) (P.K) | Cod_vendedor (num,3) (PK) |
Descricao (alfa,20) | Prazo_entrega (data) | Nome_vendedor (alfa,30) |
Unidade (alfa,2) | Cod_cliente (FK) | Faixa_comissao (num(4,2) ) |
Valor_unitario (num(6,2)) | Cod_vendedor (FK) | Salario_fixo (num(7,2)) |
--------------------------------------------------------------------------------------------------------------------------------------------------
E as seguintes consultas para realizar?
Quais os clientes que só compraram com o vendedor com codigo 10 e com mais nenhum outro vendedor (fidelidade).
Quais vendedores não fizeram mais de 5 pedidos.
Quais os vendedores não fizeram nenhum pedido no mês de maio/2007
Listar o nome do vendedor que mais fez pedidos.
Listar o nome dos clientes e o número total de pedidos associados a cada cliente em ordem decrescente de vendas, isto é do que mais tem pedidos para o que menos tem.
Excluir todos os itens dos pedidos feitos pelo cliente de código =2;
Alterar o valor unitário de todos os produtos sem vendas no ano de 2007 para menos 20%.
muito obrigado miller.
Celiol.
Curtidas 0
Respostas
Marisiana Battistella
11/02/2014
Bom dia! =)
Você já tentou resolver alguma das situações?
Sugiro que vc vá postando as tuas dúvidas, assim podemos interagir contigo e ir dando dicas e explicações sobre cada dúvida que vc tiver....
Você já tentou resolver alguma das situações?
Sugiro que vc vá postando as tuas dúvidas, assim podemos interagir contigo e ir dando dicas e explicações sobre cada dúvida que vc tiver....
GOSTEI 0
Alex Lekao
11/02/2014
No Comments... rsrsr
GOSTEI 0
Isaac Jose
11/02/2014
Bom dia a todos.
Presado entendo suas duvidas como a todos..
sei que no principio tudo parece dificil ...
porem nao acho que seria construtivo para vc profissionalmente lhe entregar tudo... como a colega disse tente fazer ao maximo e poste suas duvidas que vc tera...
mais vou fazer 2 para vc ter um base.. porem com pequenos erros para vc corrigilos..
-- abrindo uma transação
begin tran
--verificando qtd de transação
select @@TRANCOUNT as qtd_transacoes
pronto com isso é possivel manipular o banco sem correr o risco de fazer algo indesejado ou se preferir de fazer besteira rsr
procure utilizar isso sempre pois um dia ira jurar amor eterno a esse comando..
o que vc colocou como penultimo item para mim deve ser o primeiro a ser feito ja que nao a interrese desses clientes.
delete da_tabela_cliente
where campo = condicao
ou seja
delete da tabela xpto
quando o campo x for = a y..
select COUNT(numerodeperidos) pedido ,nomecliente from tabela
group by nomecliente
order by nomecliente desc
espero que ajude
att Isaac
Presado entendo suas duvidas como a todos..
sei que no principio tudo parece dificil ...
porem nao acho que seria construtivo para vc profissionalmente lhe entregar tudo... como a colega disse tente fazer ao maximo e poste suas duvidas que vc tera...
mais vou fazer 2 para vc ter um base.. porem com pequenos erros para vc corrigilos..
-- abrindo uma transação
begin tran
--verificando qtd de transação
select @@TRANCOUNT as qtd_transacoes
pronto com isso é possivel manipular o banco sem correr o risco de fazer algo indesejado ou se preferir de fazer besteira rsr
procure utilizar isso sempre pois um dia ira jurar amor eterno a esse comando..
o que vc colocou como penultimo item para mim deve ser o primeiro a ser feito ja que nao a interrese desses clientes.
delete da_tabela_cliente
where campo = condicao
ou seja
delete da tabela xpto
quando o campo x for = a y..
select COUNT(numerodeperidos) pedido ,nomecliente from tabela
group by nomecliente
order by nomecliente desc
espero que ajude
att Isaac
GOSTEI 0
Isaac Jose
11/02/2014
Bom dia a todos.
Presado entendo suas duvidas como a todos..
sei que no principio tudo parece dificil ...
porem nao acho que seria construtivo para vc profissionalmente lhe entregar tudo... como a colega disse tente fazer ao maximo e poste suas duvidas que vc tera...
mais vou fazer 2 para vc ter um base.. porem com pequenos erros para vc corrigilos..
-- abrindo uma transação
begin tran
--verificando qtd de transação
select @@TRANCOUNT as qtd_transacoes
pronto com isso é possivel manipular o banco sem correr o risco de fazer algo indesejado ou se preferir de fazer besteira rsr
procure utilizar isso sempre pois um dia ira jurar amor eterno a esse comando..
o que vc colocou como penultimo item para mim deve ser o primeiro a ser feito ja que nao a interrese desses clientes.
delete da_tabela_cliente
where campo = condicao
ou seja
delete da tabela xpto
quando o campo x for = a y..
select COUNT(numerodeperidos) pedido ,nomecliente from tabela
group by nomecliente
order by nomecliente desc
espero que ajude
att Isaac
Presado entendo suas duvidas como a todos..
sei que no principio tudo parece dificil ...
porem nao acho que seria construtivo para vc profissionalmente lhe entregar tudo... como a colega disse tente fazer ao maximo e poste suas duvidas que vc tera...
mais vou fazer 2 para vc ter um base.. porem com pequenos erros para vc corrigilos..
-- abrindo uma transação
begin tran
--verificando qtd de transação
select @@TRANCOUNT as qtd_transacoes
pronto com isso é possivel manipular o banco sem correr o risco de fazer algo indesejado ou se preferir de fazer besteira rsr
procure utilizar isso sempre pois um dia ira jurar amor eterno a esse comando..
o que vc colocou como penultimo item para mim deve ser o primeiro a ser feito ja que nao a interrese desses clientes.
delete da_tabela_cliente
where campo = condicao
ou seja
delete da tabela xpto
quando o campo x for = a y..
select COUNT(numerodeperidos) pedido ,nomecliente from tabela
group by nomecliente
order by nomecliente desc
espero que ajude
att Isaac
GOSTEI 0
Isaac Jose
11/02/2014
Bom dia a todos.
Presado entendo suas duvidas como a todos..
sei que no principio tudo parece dificil ...
porem nao acho que seria construtivo para vc profissionalmente lhe entregar tudo... como a colega disse tente fazer ao maximo e poste suas duvidas que vc tera...
mais vou fazer 2 para vc ter um base.. porem com pequenos erros para vc corrigilos..
-- abrindo uma transação
begin tran
--verificando qtd de transação
select @@TRANCOUNT as qtd_transacoes
pronto com isso é possivel manipular o banco sem correr o risco de fazer algo indesejado ou se preferir de fazer besteira rsr
procure utilizar isso sempre pois um dia ira jurar amor eterno a esse comando..
o que vc colocou como penultimo item para mim deve ser o primeiro a ser feito ja que nao a interrese desses clientes.
delete da_tabela_cliente
where campo = condicao
ou seja
delete da tabela xpto
quando o campo x for = a y..
select COUNT(numerodeperidos) pedido ,nomecliente from tabela
group by nomecliente
order by nomecliente desc
caso funcione e seja realmente isso que vc quer
execute o comando
commit
o mesmo ira confirmar o que vc acabou de fazer
caso nao seja isso utilize o rollback
para voltar ao estado inicial..
e começe o processo novamente ate obter o resultado esperado.
espero que ajude
att Isaac
Presado entendo suas duvidas como a todos..
sei que no principio tudo parece dificil ...
porem nao acho que seria construtivo para vc profissionalmente lhe entregar tudo... como a colega disse tente fazer ao maximo e poste suas duvidas que vc tera...
mais vou fazer 2 para vc ter um base.. porem com pequenos erros para vc corrigilos..
-- abrindo uma transação
begin tran
--verificando qtd de transação
select @@TRANCOUNT as qtd_transacoes
pronto com isso é possivel manipular o banco sem correr o risco de fazer algo indesejado ou se preferir de fazer besteira rsr
procure utilizar isso sempre pois um dia ira jurar amor eterno a esse comando..
o que vc colocou como penultimo item para mim deve ser o primeiro a ser feito ja que nao a interrese desses clientes.
delete da_tabela_cliente
where campo = condicao
ou seja
delete da tabela xpto
quando o campo x for = a y..
select COUNT(numerodeperidos) pedido ,nomecliente from tabela
group by nomecliente
order by nomecliente desc
caso funcione e seja realmente isso que vc quer
execute o comando
commit
o mesmo ira confirmar o que vc acabou de fazer
caso nao seja isso utilize o rollback
para voltar ao estado inicial..
e começe o processo novamente ate obter o resultado esperado.
espero que ajude
att Isaac
GOSTEI 0
Celiol.
11/02/2014
concordo com ela galera mas estou tentando sim ja fiz 12 mas esses ai nao estou nem conseguindo rastrar na tabela o que deve acontecer e que ja to de cabeça quente mas vou postando aqui pra voces.
--quais clcientes compraram somente com o vendedor de codigo 10?
select tbPedido.codCliente from tbPedido where numPedido = (select codVendedor from tbPedido where codVendedor = 10)
fiz assim mas ele ta me retarnando a consulta fazia sem nada.
--quais clcientes compraram somente com o vendedor de codigo 10?
select tbPedido.codCliente from tbPedido where numPedido = (select codVendedor from tbPedido where codVendedor = 10)
fiz assim mas ele ta me retarnando a consulta fazia sem nada.
GOSTEI 0
Celiol.
11/02/2014
galera tentei outro aqui e ainda não consegui fazer deem uma olhada.
Excluir todos os itens dos pedidos feitos pelo cliente de código =2;
delete from tbitemPedido where numPedido = (select numPedido from tbPedido where tbPedido.codCliente = 002)
deu erro, ta bem difícil essa parte aqui galera.
Excluir todos os itens dos pedidos feitos pelo cliente de código =2;
delete from tbitemPedido where numPedido = (select numPedido from tbPedido where tbPedido.codCliente = 002)
deu erro, ta bem difícil essa parte aqui galera.
GOSTEI 0
Celiol.
11/02/2014
bem galera estou tentando mas parece que ta ficando mais claro eu sem fome e descançado mas...
-- quais vendedores nao fizeram pedidos no mes de março?
consulta: select distinct codVendedor from tbPedido where codVendedor not in (select numPedido from tbPedido where DATEPART (M, prazoPedido) = 03);
no inicio achei que tava certo mas ai fui e inseri: insert into tbPedido values (009, '03/12/2011', 004, 002)
mas ainda assim ele retornou o vendedor 2,
-- quais vendedores nao fizeram pedidos no mes de março?
consulta: select distinct codVendedor from tbPedido where codVendedor not in (select numPedido from tbPedido where DATEPART (M, prazoPedido) = 03);
no inicio achei que tava certo mas ai fui e inseri: insert into tbPedido values (009, '03/12/2011', 004, 002)
mas ainda assim ele retornou o vendedor 2,
GOSTEI 0
Marisiana Battistella
11/02/2014
concordo com ela galera mas estou tentando sim ja fiz 12 mas esses ai nao estou nem conseguindo rastrar na tabela o que deve acontecer e que ja to de cabeça quente mas vou postando aqui pra voces.
--quais clcientes compraram somente com o vendedor de codigo 10?
select tbPedido.codCliente from tbPedido where numPedido = (select codVendedor from tbPedido where codVendedor = 10)
fiz assim mas ele ta me retarnando a consulta fazia sem nada.
--quais clcientes compraram somente com o vendedor de codigo 10?
select tbPedido.codCliente from tbPedido where numPedido = (select codVendedor from tbPedido where codVendedor = 10)
fiz assim mas ele ta me retarnando a consulta fazia sem nada.
Isso ai!!! Assim fica mais fácil de saber onde vc tem dificuldades...
Seguinte...
Neste caso, vc não precisa utilizar subselect para pegar os vendedores de código 10.
Essa é uma "regra de negócio" que deve ser tratada na tua cláusula where, pois toda a consulta deve ser restringida sob essa condição.
E no mais é só vc ligar as chaves estrangeira corretamente.
A SQL que vc precisa é esse...
select c.nome_cliente
from cliente c
join pedido p
on p.cod_cliente = c.cod_cliente
join vendedor v
on p.cod_vendedor = v.cod_vendedor
where v.cod_vendedor = 10
Utilizei o padrão ANSI para pra criar o SQL, mas caso vc não tenha aprendido ainda, é a mesma coisas que vc fazer assim:
select c.nome_cliente
from cliente c,
pedido p,
vendedor v
where v.cod_vendedor = 10
and p.cod_cliente = c.cod_cliente
and p.cod_vendedor = v.cod_vendedor
GOSTEI 0
Marisiana Battistella
11/02/2014
galera tentei outro aqui e ainda não consegui fazer deem uma olhada.
Excluir todos os itens dos pedidos feitos pelo cliente de código =2;
delete from tbitemPedido where numPedido = (select numPedido from tbPedido where tbPedido.codCliente = 002)
deu erro, ta bem difícil essa parte aqui galera.
Excluir todos os itens dos pedidos feitos pelo cliente de código =2;
delete from tbitemPedido where numPedido = (select numPedido from tbPedido where tbPedido.codCliente = 002)
deu erro, ta bem difícil essa parte aqui galera.
Aqui estamos com a mesma situação... Vc não precisa utilizar esse subselect..
Na claúsula WHERE vc deve definir qual é número do pedido que terá os itens excluidos ( numPedido = 2 )
e deve fazer a ligação de chave estrangeira da tabela Item_Pedido com chave primária da tabela Pedido.
GOSTEI 0
Celiol.
11/02/2014
valeu esta dando certo Mari. Olha esse que tentei fazer
--quais clientes compraram apenas com vendedor de codigo igual a003
select tbPedido.codCliente from tbPedido where numPedido in(select codVendedor from tbPedido where codVendedor = '003')
achei que tinha dado certo mas inseri mais uma venda com vendedor de codigo 003 e ele nao trouxe. Ha e seu colocar o sinal de = no lugar do in ele da um erro muito estranho, sabe como posso resolver. mas estou tentando la.
Abraços.
--quais clientes compraram apenas com vendedor de codigo igual a003
select tbPedido.codCliente from tbPedido where numPedido in(select codVendedor from tbPedido where codVendedor = '003')
achei que tinha dado certo mas inseri mais uma venda com vendedor de codigo 003 e ele nao trouxe. Ha e seu colocar o sinal de = no lugar do in ele da um erro muito estranho, sabe como posso resolver. mas estou tentando la.
Abraços.
GOSTEI 0
Marisiana Battistella
11/02/2014
É a mesma situação da questão "quais clcientes compraram somente com o vendedor de codigo 10?"
Segue a mesma lógica...
Segue a mesma lógica...
GOSTEI 0
Marisiana Battistella
11/02/2014
Provavelmente o erro que está ocorrendo quando vc troca o "in" por = é porque o subselect tá retornando mais de um registro...
Testa ai pra ver se é isso, executa o teu subselect sozinho pra ver como é o retorno dele....
Testa ai pra ver se é isso, executa o teu subselect sozinho pra ver como é o retorno dele....
GOSTEI 0
Celiol.
11/02/2014
Ola meu subSelect retornou certo so os clientes com venda igual a 3
mas quando coloco o codigo todo ele da um erro.
--quais clientes compraram somente como o vendedor de codigo 003
select codCliente from tbPedido where codVendedor in(
select codVendedor, numPedido from tbPedido where codVendedor = 3)
erro: Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
mas quando coloco o codigo todo ele da um erro.
--quais clientes compraram somente como o vendedor de codigo 003
select codCliente from tbPedido where codVendedor in(
select codVendedor, numPedido from tbPedido where codVendedor = 3)
erro: Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
GOSTEI 0
Celiol.
11/02/2014
Mari este ultimo tambem ja arrumei vou tentar os outros agora estou acabando
Obrigado.
Obrigado.
GOSTEI 0
Marisiana Battistella
11/02/2014
Ola meu subSelect retornou certo so os clientes com venda igual a 3
mas quando coloco o codigo todo ele da um erro.
--quais clientes compraram somente como o vendedor de codigo 003
select codCliente from tbPedido where codVendedor in(
select codVendedor, numPedido from tbPedido where codVendedor = 3)
erro: Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
mas quando coloco o codigo todo ele da um erro.
--quais clientes compraram somente como o vendedor de codigo 003
select codCliente from tbPedido where codVendedor in(
select codVendedor, numPedido from tbPedido where codVendedor = 3)
erro: Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Por nada, imagina!
Mas vc não precisa utilizar subselect...
Todas as tabelas tem ligações entre elas (chaves estrangeiras) vc pode buscar qualquer informação de qualquer tabela desde que vc crie os JOINs corretamente...
Esse select que vc fez, vc pode fazer assim:
select c.codcliente,
c.nome_cliente
from tbcliente c
inner join tbPedido p
on p.codcliente = c.codcliente
where p.codVendedor = 3
Ou então pelo método simples....
select c.codcliente,
c.nome_cliente
from tbcliente c,
tbPedido p
where p.codcliente = c.codcliente
and p.codVendedor = 3
GOSTEI 0