none
Consulta com Union RRS feed

  • Pergunta

  •  

    Senhores Boa Tarde, estou com a seguinte dúvida:

     

    Tenha uma tabela de Usuários e outra de Pedidos.

    1 – Existem Usuarios com Pedidos

    2 - Existem Usuarios com + de 1 Pedido

    3 – Existem Usuarios sem Pedidos

     

    Peciso retornar em um select todos os usuários da tabela Usuários e se tiver pedidos a data em que ele fez o pedido... Porém preciso da data de pedido mais recente e somente 1 único registro... Da forma que estou fazendo abaixo ele retorna todos os pedidos que o usuário tem na tabela de Pedidos...

     

    O restante já está ok...Só preciso descobrir como fazer para retornar somente o pedido mais recente quando tiver...

     

    Code Snippet

    SELECT     Usuarios.user_id, Pedidos.data_pedido

    FROM         Usuarios left JOIN

                          Pedidos ON (Usuarios.user_id = Pedidos.user_id) AND (Usuarios.user_id <> '')

    UNION

    SELECT     Usuarios.user_id, Pedidos.data_pedido

    FROM         Pedidos left JOIN

                          Usuarios ON (Pedidos.user_id = Usuarios.user_id) AND (Pedidos.user_id <> '') AND (Pedidos.data_pedido <> '')

    WHERE     Pedidos.user_id IS NOT NULL AND Usuarios.user_id IS NOT NULL

     

     

     

    Obrigado.

    sexta-feira, 14 de novembro de 2008 15:47

Respostas

  • Boa Tarde JayJr83,

     

    Seja bem vindo à comunidade de SQL Server do MSDN.

     

    Nós participantes do fórum tentaremos ajudá-lo com suas dúvidas e problemas através de nosso conhecimento, disponibilidade e experiência. Se ao final você estiver satisfeito com a resposta, peço que marque-a como respondida para que a solução seja devidamente reconhecida e o sistema de busca melhorado.

     

    Será que a consulta abaixo não resolveria ?

     

    Code Snippet

    SELECT Usuarios.user_id, MAX(Pedidos.data_pedido)

    FROM Usuarios left JOIN

    Pedidos ON (Usuarios.user_id = Pedidos.user_id) AND (Usuarios.user_id <> '')

     

     

    Os clientes que não tiverem pedidos viram com a data nula.

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 14 de novembro de 2008 16:29

Todas as Respostas

  • Boa Tarde JayJr83,

     

    Seja bem vindo à comunidade de SQL Server do MSDN.

     

    Nós participantes do fórum tentaremos ajudá-lo com suas dúvidas e problemas através de nosso conhecimento, disponibilidade e experiência. Se ao final você estiver satisfeito com a resposta, peço que marque-a como respondida para que a solução seja devidamente reconhecida e o sistema de busca melhorado.

     

    Será que a consulta abaixo não resolveria ?

     

    Code Snippet

    SELECT Usuarios.user_id, MAX(Pedidos.data_pedido)

    FROM Usuarios left JOIN

    Pedidos ON (Usuarios.user_id = Pedidos.user_id) AND (Usuarios.user_id <> '')

     

     

    Os clientes que não tiverem pedidos viram com a data nula.

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 14 de novembro de 2008 16:29
  • Boa Tarde Gustavo.

     

    Muito obrigado por seu retorno e obrigado pelas boas vindas.

     

    Sou totalmente leigo em SQL. 

     

    Testei seu código e me retornou a seguinte mensagem de erro:

     

    Column 'Usuarios.user_id' is invalid in the select list because is is not contained in an aggregate function and there is no GROUP BY CLause.

     

    Consegui com um amigo o seguinte código:

     

    Code Snippet
    select
     u.user_id, data_pedido=max(isnull(convert(varchar(10), p.data_pedido, 120), ''))
    from usuarios u
     left join pedidos p on (p.user_id = u.user_id)
    group by u.user_id

     

     

    E estou testando, mais acredito que irá resolver meu problema...

     

    Posto aqui a solução encontrada e se puder verificar o erro da solução que me apresentou fico muito grato tbm...

     

    Abraços.

    sexta-feira, 14 de novembro de 2008 17:17
  • Olá JayJr83,

     

    Era exatamente isso que eu propus, só esqueci o GROUP BY.

    Também acredito que resolverá o seu problema.

     

    Abs,

     

    Gustavo

     

    sexta-feira, 14 de novembro de 2008 17:35
  • Nossa...

     

    Peço desculpas... O código é o mesmo Gustavo... Eu li e reli e só fui perceber isso agora...rs

     

    Estava me concentrando nos resultados e não no que eu estava fazendo... De qualquer forma muitíssimo obrigado...

     

    Vou marcar como resposta.

     

    Abraços.

     

    sexta-feira, 14 de novembro de 2008 17:37