problema sql (sql server 2000)

alfinete

Power Member
Código:
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

Código:
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
 
Última edição:
melhor explicando o problema

Código:
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

Código:
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


Código:
datahora              quantidade      produto      stock     utilizador
(pedido aceite)                                                      (que aceitou)
o tipo o query que eu quero que apareça é



Código:
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
 
Última edição:
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))


 
de qq das maneira obrigado

esta aqui a solução so para pedidos de estado = 0 e de estado = 2

Código:
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
 
Back
Topo