Usuário com melhor resposta
Usar campo de fora do LEFT JOIN ou OUTER APLLY no OFFSET ROWS FETCH NEXT

Pergunta
-
Boa tarde, pessoal, estou com um problema que não estou conseguindo resolver, a consulta abaixo não roda pois quando eu faço um IIF no OFFSET ROWS FETCH NEXT ele não permite pois é um campo da tabela exterior a sub consulta, alguém pode me ajudar, segue código abaixo:
DECLARE @PontoCorte INT; SET @PontoCorte = 100; SELECT CampoA, CampoB, ROUND(SUM(CampoC),2) AS CampoC FROM TabelaX x LEFT JOIN (SELECT TOP 10 CampoH,CampoI,CampoJ FROM TabelaY ORDER BY OFFSET 0 ROWS FETCH NEXT IIF(ROUND(SUM(x.CampoC),2) < @PontoCorte,1,10) ROWS ONLY ) y ON x.CampoA = y.CampoH GROUP BY CampoA, CampoB
A mensagem que aparece quando eu tenho rodar esse contexto de códito é: The multi-part identifier "x.CampoC" could not be bound.
AJUDA AI GALERA! OQUE EU FAÇO!
Respostas
-
Como está a sua query?
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta GabrielBarbosa67 quinta-feira, 5 de julho de 2018 20:04
Todas as Respostas
-
Fala Gabriel, blz?
Assim, o que você está tentando fazer ali está meio estranho, não to vendo muito sentido pra falar a verdade, mas nos diga, qual o seu objetivo nessa consulta.
Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCPD
-
Então Janderson, é o seguinte, o FETCH NEXT serve para validar a quantidade de materiais que irão receber o valor rateado, porém não gostaria de ratear um valor muito baixo, ou seja, com a variavel @PontoCorte eu determino o valor mínimo, ou seja, se o valor da x.ColunaC for menor que 100 por exemplo, eu irei retornar apenas uma linha da subconsulta para realizar o left, caso o valor da coluna x.ColunaC for maior que 100 então vou retornar 10 linhas do left join. Pegou a jogada?
-
Boa tarde,
Não cheguei a fazer nenhum teste mas experimente dessa forma:
DECLARE @PontoCorte INT; SET @PontoCorte = 100; WITH CTE_SUM as ( SELECT CampoA, CampoB, ROUND(SUM(CampoC),2) AS CampoC FROM TabelaX x GROUP BY CampoA, CampoB ) SELECT * FROM CTE_SUM c OUTER APPLY ( SELECT CampoH, CampoI, CampoJ FROM TabelaY y WHERE y.CampoH = c.CampoA ORDER BY OFFSET 0 ROWS FETCH NEXT (IIF(c.CampoC < @PontoCorte, 1, 10)) ROWS ONLY ) y
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex quinta-feira, 5 de julho de 2018 19:30
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 12 de julho de 2018 11:20
-
-
Como está a sua query?
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta GabrielBarbosa67 quinta-feira, 5 de julho de 2018 20:04
-
-