Pular para o conteúdo

Fóruns SQL e PL/SQL Dúvida subquery com case Responder a: Dúvida subquery com case

#153595
Avatar photoJosé Laurindo Chiappa
Moderador

    Eu vejo dois erros aí , um de sintaxe E outro de conceito : sintaxe é a questão que entre CADA COLUNA num SELECT vc TEM que ter uma vírgula de separação, e vc tem aí :

    SELECT D.TIPO,
    ….
    D.VALORORIGINALANTERIOR

    CASE WHEN D.TIPO = 1 THEN D.QUANTIDADEANTERIOR, D.PERIODOLOCACAOANTERIOR
    WHEN 2 THEN D.DATARESCISAO
    WHEN 3 THEN D.INICIOANTERIOR, D.FIMANTERIOR
    WHEN 4 THEN D.QUANTIDADEANTERIOR, D.PERIODOLOCACAOANTERIOR
    WHEN 5 THEN D.VALORUNITARIOANTERIOR, D.VALORUNITARIO
    ELSE D.PERIODICIDADEANTERIOR, D.VALORORIGINALANTERIOR

    END AS TIPO_OBJETO

    FROM CN_ADITIVOOBJETOS D

    ==> tá vendo que FALTOU a vírgula entre a coluna D.VALORORIGINALANTERIOR e a coluna TIPO_OBJETO ???

    Segunda, coisa, aí é Conceito : dentro de um CASE o THEN de cada WHEN vai retornar UM e apenas UM VALOR para cada WHEN que for verdadeiro, vide a documentação oficial em https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-control-statements.html#GUID-18777904-23F6-4F6D-8B41-46BABF00BA03 que diz isso… Então, isso que vc escreveu :

    WHEN 3 THEN D.INICIOANTERIOR, D.FIMANTERIOR

    suponho que vc quer que quando for o valor 3 o THEN retorne DOIS VALORES , o .INICIOANTERIOR e o D.FIMANTERIOR ??? NÃO VAI ROLAR….
    O que vc pode fazer aí seria CONCATENAR os dois valores numa stringona, ou retornar um TYPE/Array (que aí sim é um objeto único MAS pode ter multiplos valores contidos nele)…

    Abraços,

    Chiappa