1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

problema sql (sql server 2000)

Discussão em 'Programação' iniciada por alfinete, 11 de Outubro de 2007. (Respostas: 6; Visualizações: 1011)

  1. alfinete

    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: 11 de Outubro de 2007
  2. SoundSurfer

    SoundSurfer Power Member

    Podes fazer um Inner Join dessa query toda com outra igual com o estado a 0.
     
  3. alfinete

    alfinete Power Member

    agradeço a ajuda mas nãi estou a conseguir

    agradecia que desses um exemplo de como
     
  4. alfinete

    alfinete Power Member

    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: 11 de Outubro de 2007
  5. ricgodi

    ricgodi Power Member

    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))


     
  6. alfinete

    alfinete Power Member

    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
     
  7. SoundSurfer

    SoundSurfer Power Member

    Como no problema anterior, tens de fazer o left join dos pendentes à tabela "a" e "b" e ficares com, por exemplo apend. e bpend.
     

Partilhar esta Página