Pular para o conteúdo

Fóruns SQL e PL/SQL Condições no WHERE Condições no WHERE

#94541
pride_fns
Participante

    Tudo bem, realmente não soube transmitir, por isso vo colocar todo o SQL e explicar mais detalhadamente.

    Como podem ver no SELECT faço um CASE para fazer SUBSELECT’s separando o calculo de “Data Início do Ano Passado” e outro de “Data Início do Ano Atual”.

    Então no WHERE também tenho que fazer o mesmo CASE que criei no SELECT porque para cada caso uso uma condição diferente.

    Como descobrir que não é possível utilizar o CASE deste modo, ainda não conseguir encontrar um outro método.

    E 1000 desculpas se ficou muito grande!!!

    [sql]
    SELECT cod_ben,
    CASE WHEN TO_CHAR(SYSDATE,’DD/MM/’) 0
    THEN
    (
    SELECT SUM(a.dt_pagamento – a.dt_vencto)
    FROM sis.boleto_ben a INNER JOIN sis.benefics b USING(cod_ben)
    INNER JOIN sis.ativacao_ben c USING(cod_ben)
    WHERE c.dthr_final is null
    and b.cod_emp = 0
    and cod_ben = 1821001
    and a.dt_vencto >= TO_DATE(TO_CHAR(b.dtcad,’DD/MM/’) || (TO_CHAR(SYSDATE,’YYYY’)-1))
    and a.dt_pagamento > a.dt_vencto
    and a.vlr_pago > a.vlr_boleto
    )
    END
    ELSE
    CASE WHEN TO_CHAR(a.dt_vencto – TO_DATE(TO_CHAR(b.dtcad,’DD/MM/’) || (TO_CHAR(SYSDATE,’YYYY’)))) > 0
    THEN
    (
    SELECT SUM(a.dt_pagamento – a.dt_vencto)
    FROM sis.boleto_ben a INNER JOIN sis.benefics b USING(cod_ben)
    INNER JOIN sis.ativacao_ben c USING(cod_ben)
    WHERE c.dthr_final is null
    and b.cod_emp = 0
    and cod_ben = 1821001
    and a.dt_vencto >= TO_DATE(TO_CHAR(b.dtcad,’DD/MM/’) || (TO_CHAR(SYSDATE,’YYYY’)))
    and a.dt_pagamento > a.dt_vencto
    and a.vlr_pago > a.vlr_boleto
    )
    END
    END qntd_acum
    FROM sis.boleto_ben a INNER JOIN sis.benefics b USING(cod_ben)
    INNER JOIN sis.ativacao_ben c USING(cod_ben)
    WHERE CASE WHEN TO_CHAR(SYSDATE,’DD/MM/’) = TO_DATE(TO_CHAR(b.dtcad, DD/MM/) || (TO_CHAR(SYSDATE, YYYY)-1))’
    ELSE
    ‘and a.dt_vencto >= TO_DATE(TO_CHAR(b.dtcad, DD/MM/) || (TO_CHAR(SYSDATE, YYYY)))’
    END
    and cod_ben = 1821001
    and ((a.dt_vencto >= TO_DATE(TO_CHAR(b.dtcad,’DD/MM/’) || (TO_CHAR(SYSDATE,’YYYY’)-1))) OR (a.dt_vencto >= TO_DATE(TO_CHAR(b.dtcad,’DD/MM/’) || (TO_CHAR(SYSDATE,’YYYY’)))))
    and ROWNUM = 1
    [/sql]