› Fóruns › SQL e PL/SQL › Dúvida subquery com case › Responder a: Dúvida subquery com case
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