none
AYUDA CON SELECT CASE ORACLE RRS feed

  • Pregunta

  • BUEN DIA COLEGAS AQUI LE PRESENTO UN CASO:

    EL CAMPO PDANROPER en algunos tiene registros por ejemplo

    PDANROPER ='2016'||'11' --TIENE REGISTROS

    pero si pongo:

    PDANROPER ='2016'||'12' --TIENE REGISTROS  --No tiene registros hasta fin de mes.

    la cuestión es que quiero sumar todos los PDANROPER es decir ('2016'||'01'+'2016'||'02'....+'2016'||'12')

    pero como '2016'||'12' esta vacio (no nullo) eh querido hacer este siguiente case 

    SELECT DISTINCT
    --Aqui cuenta si es vacio (0) entonces reemplaza el valor por 0
    CASE WHEN (SELECT COUNT(*)
                FROM PLNDATCAL
                WHERE PDACODCON ='30013'
                AND   PDACODCIA='002'
                AND   pdacodsuc='010'
                AND   PDACODPRO='11'
                AND   PDANROPER ='2016'||'12')=0
    THEN (SELECT '0' FROM DUAL) 
     -- en caso contrario deberia mostrarme los registro de campo PDACODTRA
     ELSE (SELECT PDACODTRA
                FROM PLNDATCAL
                WHERE PDACODCON ='30013'
                AND   PDACODCIA='002'
                AND   pdacodsuc='010'
                AND   PDACODPRO='11'
                AND   PDANROPER ='2016'||'12')         
      END 
    FROM PLNDATCAL;  

    Y me sale 0 (es lo que quiero tener)

    pero si reemplazo PDANROPER='2016'||'11'

    SELECT DISTINCT --Aqui cuenta si es vacio (0) entonces reemplaza el valor por 0 CASE WHEN (SELECT COUNT(*) FROM PLNDATCAL WHERE PDACODCON ='30013' AND PDACODCIA='002' AND pdacodsuc='010' AND PDACODPRO='11' AND PDANROPER ='2016'||'11')=0 THEN (SELECT '0' FROM DUAL) -- en caso contrario deberia mostrarme los registro de campo PDACODTRA ELSE (SELECT PDACODTRA FROM PLNDATCAL WHERE PDACODCON ='30013' AND PDACODCIA='002' AND pdacodsuc='010' AND PDACODPRO='11' AND PDANROPER ='2016'||'11') END FROM PLNDATCAL;

    -- me sale este error: la subconsulta devuelve mas de una fila


    Patrick Aullas Analista Programador Saludos!...


    • Editado Aullas jueves, 15 de diciembre de 2016 17:59
    jueves, 15 de diciembre de 2016 14:28

Todas las respuestas

  • Hola,

    El caracter || en oracle significa concatenacion, o sea que PDANROPER = '2016' || '11' es lo mismo que PDANROPER = '201611'.

    No sera que vos queres:

    PDANROPER = '''2016''||''11'''

    o

    PDANROPER = '2016||11'


    Victor Koch

    jueves, 15 de diciembre de 2016 17:28
  • El problema en es eso amigo... lo puse 

    PDANROPER='2016'||'11'

    ya que 2016-- es el resultado de una variable e igual que 11

    el campo vacio  (no nulo) lo estoy reemplazando por 0

    el problema es:

    SELECT DISTINCT
    --Aqui cuenta si es vacio (0) entonces reemplaza el valor por 0
    CASE WHEN (SELECT COUNT(*)
                FROM PLNDATCAL
                WHERE PDACODCON ='30013'
                AND   PDACODCIA='002'
                AND   pdacodsuc='010'
                AND   PDACODPRO='11'
                AND   PDANROPER ='2016'||'11')=0
    THEN (SELECT '0' FROM DUAL) 
     -- en caso contrario deberia mostrarme los registro de campo PDACODTRA
     ELSE (SELECT PDACODTRA
                FROM PLNDATCAL
                WHERE PDACODCON ='30013'
                AND   PDACODCIA='002'
                AND   pdacodsuc='010'
                AND   PDACODPRO='11'
                AND   PDANROPER ='2016'||'11')         
      END 
    FROM PLNDATCAL;  

    me sale que la subconsulta devuelve mas de una fila


    Patrick Aullas Analista Programador Saludos!...

    jueves, 15 de diciembre de 2016 17:58
  • Hola Aullas,

    Gracias por visitar los foros. Has posteado tu pregunta en los foros de Msdn, sería recomendable que postearas tu pregunta directamente en los foros de Oracle donde podrías obtener una mejor ayuda sobre tu pregunta.

    Saludos

    Joyce
    _________________________________________________________________________________________
    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, hace que sea más fácil para los otros visitantes encontrar la solución  más tarde. Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal  cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 15 de diciembre de 2016 19:03
    Moderador
  • Muchas Gracias por tus respuesta para mi no hay problema si me ayudan con mi problema en forma de query-sqL ya que las sintaxis son muy parecidos... saludos.

    Patrick Aullas Analista Programador Saludos!...

    jueves, 15 de diciembre de 2016 21:30