Array
(
)

Problemas com subConsultas

Delivery-ti
|
MVP
Pontos: 525
    11 fev 2014

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.

Marisiana
   - 11 fev 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....

Alex Lekao
   - 11 fev 2014

No Comments... rsrsr

Isaac Jose
   - 11 fev 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

Isaac Jose
   - 11 fev 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

Isaac Jose
   - 11 fev 2014


Citação:
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

Delivery-ti
|
MVP
Pontos: 525
    11 fev 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.

Delivery-ti
|
MVP
Pontos: 525
    11 fev 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.

Delivery-ti
|
MVP
Pontos: 525
    11 fev 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,

Marisiana
   - 11 fev 2014


Citação:
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.


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

Marisiana
   - 11 fev 2014


Citação:
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.


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.

Delivery-ti
|
MVP
Pontos: 525
    11 fev 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.

Marisiana
   - 11 fev 2014

É a mesma situação da questão "quais clcientes compraram somente com o vendedor de codigo 10?"
Segue a mesma lógica...

Marisiana
   - 11 fev 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....

Delivery-ti
|
MVP
Pontos: 525
    11 fev 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.

Delivery-ti
|
MVP
Pontos: 525
    11 fev 2014

Mari este ultimo tambem ja arrumei vou tentar os outros agora estou acabando
Obrigado.

Marisiana
   - 11 fev 2014


Citação:
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.


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