June 4, 2019 at 1:25 pm
Bom dia,
Estou apanhando desde ontem em uma sentenca. Quando eu faco o select sozinho da subquery os dados sao demonstrados corretamente, porem, na subselect me ocorre esse erro:
Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression.
Gostaria de uma ajuda por gentileza, nao tenho mais o que fazer. Sublinhei onde ocorre o erro.
Segue o select:
SELECT
id_funcionario, CHAPA, dh_inicio_periodo, dh_fim_periodo, vl_saldo_ferias, DIAS_FERIAS, fg_ferias_perdidas, nu_dias_falta, CASE WHEN vl_saldo_ferias BETWEEN 1 AND 29 THEN 'Incompleto' WHEN vl_saldo_ferias >= 30 THEN 'Aberto' ELSE 'Fechado' END sg_status_periodo
FROM
(SELECT DISTINCT FUN.ID_FUNCIONARIO id_funcionario,FER.CHAPA, CONVERT(VARCHAR(10), FER.INICIOPERAQUIS, 103) as dh_inicio_periodo, CONVERT(VARCHAR(10), FER.FIMPERAQUIS, 103) as dh_fim_periodo,
CASE WHEN FU.CODSITUACAO IN('A','E','F','G','L','M','N','O','P','Q','R','S','T','V','W','X','Y') AND FER.PERIODOABERTO = 1 THEN (DATEDIFF(day,FER.INICIOPERAQUIS,GETDATE())/12) -(SELECT SUM(CASE WHENPPP.NRODIASFERIAS IS NOT NULL ANDFER.PERIODOABERTO =1 THENPPP.NRODIASFERIAS ELSE0 END) FROMPFUFERIASPER PPP WHEREFER.CODCOLIGADA =PPP.CODCOLIGADA ANDFER.CHAPA =PPP.CHAPA ANDFER.FIMPERAQUIS =PPP.FIMPERAQUIS GROUP BYPPP.CHAPA)
WHEN FU.CODSITUACAO IN('C','D','I','K','U','Z') THEN 0 ELSE FER.SALDO END vl_saldo_ferias,
DATEDIFF(day,FER.INICIOPERAQUIS,FER.FIMPERAQUIS) DIAS_FERIAS, 'No' as fg_ferias_perdidas, PER.FALTAS as nu_dias_falta
FROM
PFUFERIAS FER
LEFT OUTER JOIN FOL_FUNCIONARIOS FUN ON FUN.CHAPA = FER.CHAPA
LEFT OUTER JOIN PFUFERIASPER PER ON PER.CODCOLIGADA = FER.CODCOLIGADA AND PER.CHAPA = FER.CHAPA AND PER.FIMPERAQUIS = FER.FIMPERAQUIS
LEFT OUTER JOIN PFUNC FU ON FU.CODCOLIGADA = FER.CODCOLIGADA AND FU.CHAPA = FER.CHAPA
WHERE FU.CODSITUACAO =('A')
)
RESULT1
ORDER
BY CHAPA,dh_inicio_periodo
June 4, 2019 at 4:30 pm
I may be wrong - can't test it without DDL to create the tables, but if you change the following it may work.
(select sum(case
when ppp.NRODIASFERIAS is not null
and fer.PERIODOABERTO = 1
then ppp.NRODIASFERIAS
else 0
end)
from PFUFERIASPER ppp
where fer.CODCOLIGADA = ppp.CODCOLIGADA
and fer.CHAPA = ppp.CHAPA
and fer.FIMPERAQUIS = ppp.FIMPERAQUIS
group by ppp.CHAPA
)
to -- put sum outside the select
sum(select (case
when ppp.NRODIASFERIAS is not null
and fer.PERIODOABERTO = 1
then ppp.NRODIASFERIAS
else 0
end)
from PFUFERIASPER ppp
where fer.CODCOLIGADA = ppp.CODCOLIGADA
and fer.CHAPA = ppp.CHAPA
and fer.FIMPERAQUIS = ppp.FIMPERAQUIS
group by ppp.CHAPA
)
June 4, 2019 at 4:40 pm
Entendi Frederico, não há necessidade de fazer um subselect dentro da query né.
Muito obrigado pelo auxilio, as vezes quem está de fora consegue enxergar melhor do que a gente que estamos em cima de uma coisa muito tempo.
Abraço,
Viewing 3 posts - 1 through 2 (of 2 total)
You must be logged in to reply to this topic. Login to reply