none
Dúvida com JOIN RRS feed

  • Pergunta

  • Boa Noite pessoal,

    Estou criando uma query para relatório e preciso filtrar uma determinada tabela no JOIN, não posso usar no WHERE porque ficaria fora do escopo. É a seguinte:


    LEFT JOIN HistoricoAnalise Ha ON Ha.IdSaldoConta = Sa.Id AND NivelAnalise=2 AND Ha.Data = MAX(Ha.Data) 

     

    A mensagem de erro é:

    Msg 1015, Level 15, State 1, Line 1

    An aggregate cannot appear in an ON clause unless it is in a subquery contained in a HAVING clause or select list, and the column being aggregated is an outer reference.

     

    Podem me ajudar?

     

    Obrigado,

    Thiago Jacometti 


    Thiago Jacometti Microsoft Developer @TMJSistemas | Skype:tmattarwebco | Email:thiago@tmjsistemas.com.br | MSN: tm.jacometti@hotmail.com
    quarta-feira, 25 de janeiro de 2012 22:10

Respostas

  • Voce pode fazer o Left join com o retorno de uma query:

     

    LEFT JOIN (select top 1 idsaldoconta, nivelanalise from HistoricoAnalise HA where Ha.IdSaldoConta = Sa.Id AND NivelAnalise=2 order by DATA desc) tbl


    Marcilio Prog. Computadores Se foi útil, marque.
    quinta-feira, 26 de janeiro de 2012 02:05
  • Olá Thiago,

    Não sei qual o escopo da sua query, mas acho que o resultado que você espera receber é algo parecido com o script abaixo:

    LEFT JOIN HistoricoAnalise Ha ON Ha.IdSaldoConta = Sa.Id
                                     AND NivelAnalise=2
                                     AND Ha.Data = (SELECT MAX(Data) FROM HistoricoAnalise)
    

    Espero ter ajudado.


    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com
    quinta-feira, 26 de janeiro de 2012 02:09

Todas as Respostas

  • Voce pode fazer o Left join com o retorno de uma query:

     

    LEFT JOIN (select top 1 idsaldoconta, nivelanalise from HistoricoAnalise HA where Ha.IdSaldoConta = Sa.Id AND NivelAnalise=2 order by DATA desc) tbl


    Marcilio Prog. Computadores Se foi útil, marque.
    quinta-feira, 26 de janeiro de 2012 02:05
  • Olá Thiago,

    Não sei qual o escopo da sua query, mas acho que o resultado que você espera receber é algo parecido com o script abaixo:

    LEFT JOIN HistoricoAnalise Ha ON Ha.IdSaldoConta = Sa.Id
                                     AND NivelAnalise=2
                                     AND Ha.Data = (SELECT MAX(Data) FROM HistoricoAnalise)
    

    Espero ter ajudado.


    David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com
    quinta-feira, 26 de janeiro de 2012 02:09
  • Bom Dia David, 

    Apesar da resposta do marciliosi ser muito útil também, utilizei a sua como minha solução e funcionou muito bem...

     

    Muito Obrigado pela rápida ajuda,
    Thiago Jacometti 


    Thiago Jacometti Microsoft Developer @TMJSistemas | Skype:tmattarwebco | Email:thiago@tmjsistemas.com.br | MSN: tm.jacometti@hotmail.com
    quinta-feira, 26 de janeiro de 2012 10:42
  • essa query vai trazer resultados errados.
    Marcilio Prog. Computadores Se foi útil, marque.
    quinta-feira, 26 de janeiro de 2012 13:32