View Full Version : problema sql (sql server 2000)
alfinete 11-10-2007, 01:01 SELECT TabPedido.IdUtilizador, TabPedido.IdProduto, TabPedido.DataHora, TabPedido.Quantidade, TabPedido.Estado, TabProduto.Nome, TabProduto.Stock,
TabPedido.Codigo, TabUtilizador.Nome AS Expr1
FROM TabPedido INNER JOIN
TabProduto ON TabPedido.IdProduto = TabProduto.Id INNER JOIN
TabUtilizador ON TabPedido.IdUtilizador = TabUtilizador.Id
WHERE (TabPedido.Estado = 2)
este select esta a seleccionar tdos os pedidos com estado = 2 mostrando o utilizador que o aceitou.
mas:
eu quero mostrar tb o utilizador que o fez, tenho te ir ver do pedido com o mesmo codigo deste anterior , mas com estado = 0, e queria fazer isso tdo no mesmo query
ex:
pedido:ex de 2 registos
codigo estado utilizador
1 0 alf
1 2 alf2
o
pedido com estado = 0 foi pedido pelo utilziador alf e aceite pelo utilizador alf 2 e guardado com estado 2.
eu no select quero mostrar os dois utilizadorea
so sei que para isso tenho o mesmo codigo nos dois pedidos de estados diferentes .
gostava de saber como
obrigado
SoundSurfer 11-10-2007, 10:53 Podes fazer um Inner Join dessa query toda com outra igual com o estado a 0.
alfinete 11-10-2007, 17:16 agradeço a ajuda mas nãi estou a conseguir
agradecia que desses um exemplo de como
alfinete 11-10-2007, 18:44 melhor explicando o problema
SELECT TabPedido.IdUtilizador, TabPedido.IdProduto, TabPedido.DataHora, TabPedido.Quantidade, TabPedido.Estado, TabProduto.Nome, TabProduto.Stock,
TabPedido.Codigo, TabUtilizador.Nome AS Expr1
FROM TabPedido INNER JOIN
TabProduto ON TabPedido.IdProduto = TabProduto.Id INNER JOIN
TabUtilizador ON TabPedido.IdUtilizador = TabUtilizador.Id
WHERE (TabPedido.Estado = 2) ________
explicando o caso
tenho uma tabela pedidos com os campos e seguintes registos
idproduto idutlizador datahora quantidade codigo estado
1 2 x x 1 0
1 3 x x 1 2
como pode ver nos registos que dei no exemplo temos 2 registos com o mesmo codigo
pois são referentes ao mesmo produto , mas com utilizadores diferentes isto porque:
o registo de estado =0 é referente ao utilizador que fez o pedido
e o registo de estado = 2 é referente ao utilizador que o aceitou
o select a cima so mostra o utilizador que o aceitou, e eu quero que mostre tambem o utilizador
que o fez
este select(enviado) mostra a query
datahora quantidade produto stock utilizador
(pedido aceite) (que aceitou)
o tipo o query que eu quero que apareça é
datahora | datahora | produto | codigo|quantidade | utilizador | utilizador
(pedidofeito) | (pedidoaceite) | | | que aceitou | quepedio
(estado2) |(estado=0)
em relação a query anterior quero que contenha também o campo quantidade
gostava de uma ajuda para o caso
obrigado aguardo atenciosamente
n sei se percebi bem a tua questao.
o k keres sao o utilizador k tem o estado = 0 e o utilizador com estado=2 em k o idproduto=1 nos dois?
se for isso basta alterar o fim de
where (tabpedido.estado = 2)
para
where (tabpedido.estado in (0,2))
alfinete 12-10-2007, 01:21 de qq das maneira obrigado
esta aqui a solução so para pedidos de estado = 0 e de estado = 2
select distinct
/* select o nome de quem aceitou o pedido*/
c.Nome as Aprovador,
/*select o nome de quem fez o pedido*/
d.Nome as Requisitante,
/*select codigo do pedido*/
a.Codigo,
/*select o nome do produto*/
e.Nome as Produto,
/*select a datahora do pedido requisitado*/
f.Datahora as 'Data Req',
/*select a datahora do pedido entregue*/
a.Datahora as 'Data ent',
/*select a quantidade pedida no pedido requisitado*/
g.quantidade as 'quant req',
/*select a quantidade pedida no pedido aceite*/
a.quantidade as 'quant aceit',
/*quantidade pendente*/
from TabPedido a
/* capta o codigo do pedido referente a estado em b e select a*/
Left Join TabPedido b
on a.codigo=b.codigo
Left Join TabPedido pend
on a.codigo=pend.codigo
/* capta o o nome do utilizador que aceitou o pedido com estado em a e select c*/
Left Join TabUtilizador c
on a.IdUtilizador=c.Id
/* capta o nome do utilizador que requisitou o pedido */
Left Join TabUtilizador d
on b.IdUtilizador=d.Id
/* capta o o produto */
Left Join TabProduto e
on b.IdProduto=e.Id
/* capta a datahora do pedido estado 0 */
Left Join Tabpedido f
on b.datahora=f.datahora
/* capta a quantidade do pedido estado 0 */
left join Tabpedido g
on b.quantidade=g.quantidade
/*a para estado = 2
b para estado = 0*/
where a.estado=2
and b.estado=0
assim funciona mostrando tdo em relação a pedidos requisitados e entregues
mas se que quizer fazer tb para pendentes
e fazendo assim
[CODE]
select distinct
/* select o nome de quem aceitou o pedido*/
c.Nome as Aprovador,
/*select o nome de quem fez o pedido*/
d.Nome as Requisitante,
/*select codigo do pedido*/
a.Codigo,
/*select o nome do produto*/
e.Nome as Produto,
/*select a datahora do pedido requisitado*/
f.Datahora as 'Data Req',
/*select a datahora do pedido entregue*/
a.Datahora as 'Data ent',
/*select a quantidade pedida no pedido requisitado*/
g.quantidade as 'quant req',
/*select a quantidade pedida no pedido aceite*/
a.quantidade as 'quant aceit',
/*quantidade pendente*/
h.quantidade as 'quant pendente'
from TabPedido a
/* capta o codigo do pedido referente a estado em b e select a*/
Left Join TabPedido b
on a.codigo=b.codigo
Left Join TabPedido pend
on a.codigo=pend.codigo
/* capta o o nome do utilizador que aceitou o pedido com estado em a e select c*/
Left Join TabUtilizador c
on a.IdUtilizador=c.Id
/* capta o nome do utilizador que requisitou o pedido */
Left Join TabUtilizador d
on b.IdUtilizador=d.Id
/* capta o o produto */
Left Join TabProduto e
on b.IdProduto=e.Id
/* capta a datahora do pedido estado 0 */
Left Join Tabpedido f
on b.datahora=f.datahora
/* capta a quantidade do pedido estado 0 */
left join Tabpedido g
on b.quantidade=g.quantidade
left join Tabpedido h
on pend.quantidade=h.quantidade
/*a para estado = 2
b para estado = 0*/
where a.estado=2
and b.estado=0
and pend.estado=1
ele mes mostra os pendentes mas so os que são >0
se pendente for =0 não mostra e eu quero que mostre
gostava de resolver apenas este problemita
obrigada
SoundSurfer 12-10-2007, 10:36 Como no problema anterior, tens de fazer o left join dos pendentes à tabela "a" e "b" e ficares com, por exemplo apend. e bpend.
|
|