Usuário com melhor resposta
Dúvida com JOIN

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
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.- Marcado como Resposta Thiago Jacometti - tmjsistemas.com.br quinta-feira, 26 de janeiro de 2012 10:40
-
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- Marcado como Resposta Thiago Jacometti - tmjsistemas.com.br quinta-feira, 26 de janeiro de 2012 10:42
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.- Marcado como Resposta Thiago Jacometti - tmjsistemas.com.br quinta-feira, 26 de janeiro de 2012 10:40
-
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- Marcado como Resposta Thiago Jacometti - tmjsistemas.com.br quinta-feira, 26 de janeiro de 2012 10:42
-
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 -