SQL - Agregar un case dentro de un case

   
Vista:

Agregar un case dentro de un case

Publicado por Juan (2 intervenciones) el 01/03/2014 14:38:47
Tengo este query


case T0.transtype
when '13' then 'Factura'
when '14' then 'Nota Credito'
when '30' then 'Cheque Devuelto'
end 'Tipo Trans'


when '30' then case1 T2.transcode
when 'OKCD' then 'Cheque Devuelto'
when 'OKCP' then 'Cheque Postfechado' end


en donde necesito agregar el otro case de abajo pero me tira un error en el When despues del espacion no sabria como hacerlo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Agregar un case dentro de un case

Publicado por leonardo_josue (878 intervenciones) el 01/03/2014 22:25:41
Hola Juan...

En primer lugar no nos explicas bien qué es lo que estás tratando de hacer, por lo tanto resulta algo complicado tratar de ayudarte, ojo con eso.

Ahora, bien, Sintácticamente tienes varios errores en tu consulta:

Esta consulta es correcta:

1
2
3
4
5
case T0.transtype
   when '13' then 'Factura'
   when '14' then 'Nota Credito'
   when '30' then 'Cheque Devuelto'
end 'Tipo Trans

es decir, tomas como base el campo T0.transtype y le asignas una descripción a cada uno de los valores (13, 14, 30)

Sin embargo, todo la sentencia en su conjunto está mal escrita:

Si lo que necesitas e agregar más condiciones al CASE-WHEN de arriba, lo que tienes que hacer es colocarlas ANTES DEL END... ya que este indica el final de la sentencia... puedes agregar TANTAS CONDICIONES COMO QUIERAS ANTES DEL END:

1
2
3
4
5
6
7
8
9
case T0.transtype
when '13' then 'Factura'
when '14' then 'Nota Credito'
when '30' then 'Cheque Devuelto'
...
when '97' then 'algo'
when '98' then 'otra cosas'
when '99' then 'lo que sea'
end 'Tipo Trans'

Sin embargo, en tu sentencia de abajo pones otro campo para evaluar (T2.transcode), por lo tanto ya no entiendo qué quieres hacer... Puede haber dos posibilidades:

que quieras hacer DOS CASE-WHEN separados, entonces sería así:

1
2
3
4
5
6
7
8
9
10
CASE T0.transtype
when '13' then 'Factura'
when '14' then 'Nota Credito'
when '30' then 'Cheque Devuelto'
end 'Tipo Trans' ,
 
case T2.transcode
   when 'OKCD' then 'Cheque Devuelto'
   when 'OKCP' then 'Cheque Postfechado'
end


Es decir, colocando una coma después del (end 'Tipo Trans' ,) e iniciando un nuevo CASE-WHEN con su respectivo END...

Otra forma sería ANIDANDO CASE-WHEN, es decir, que una vez que el primer campo tome el valor de 30, entonces evaluar el segundo campo... si esto es así, entonces tendrías que ponerlo más o menos así:

1
2
3
4
5
6
7
8
9
case T0.transtype
when '13' then 'Factura'
when '14' then 'Nota Credito'
when '30' then
    case T2.transcode
        when 'OKCD' then 'Cheque Devuelto'
        when 'OKCP' then 'Cheque Postfechado'
    end
end 'Tipo Trans'


Es decir, abres y cierras un CASE-WHEN en una de las opciones.

Trata siempre de darle formato a tu código SQL, muchos de los motores lo hacen de manera automática. Esto te sirve para identificar errores de sintaxis como en este caso.

Si esto no te sirve, EXPLICA MEJOR QUÉ ES LO QUE QUIERES HACER, postea la estructura de tus tablas y pon algunos datos de ejemplo. A partir de estos datos, dinos qué es lo que esperas obtener como resultado. De esta manera será más factible que podamos ayudarte.

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Agregar un case dentro de un case

Publicado por Juan (2 intervenciones) el 03/03/2014 14:22:28
La verdad me has sacado de un problema todo estaba tan bien explicado que supe de una cual era la que necesitaba
Gracias dilema resuelto :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar