Erro na Setenca - Multiple columns are specified in an aggregated expression...

  • 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

  • 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
    )
  • 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