En el CASE simple se evalúa una columna que es siempre la misma. De acuerdo al valor que tenga esa columna se realiza alguna acción, como podemos ver a continuación:
SELECT PER_IDENTI, PER_NOMBRE, CASE PER_ESTCIV WHEN 'S' THEN 'Soltera/o' WHEN 'C' THEN 'Casada/o' WHEN 'E' THEN 'Separada/o' WHEN 'D' THEN 'Divorciada/o' WHEN 'V' THEN 'Viuda/o' END FROM PERSONAS
En la columna PER_ESTCIV guardamos una letra que representa al estado civil de una persona (S, C, E, D o V) pero en el SELECT no mostramos esa letra sino el nombre del estado civil (Soltera/o, Casada/o, Separada/o, Divorciada/o, Viuda/o) porque esto es mucho más entendible.
Fíjate que el CASE siempre debe finalizar con un END. Si no lo finalizas con un END el Firebird te mostrará un mensaje de error.
El SELECT anterior se puede mejorar agregándole un alias a la columna PER_ESTCIV para que sea más entendible:
SELECT PER_IDENTI, PER_NOMBRE, CASE PER_ESTCIV WHEN 'S' THEN 'Soltera/o' WHEN 'C' THEN 'Casada/o' WHEN 'E' THEN 'Separada/o' WHEN 'D' THEN 'Divorciada/o' WHEN 'V' THEN 'Viuda/o' END AS EstadoCivil FROM PERSONAS
Recuerda: En el CASE simple siempre se evalúa una sola columna (en este ejemplo el nombre de esa columna es PER_ESTCIV)
El índice del blog Firebird21 | Firebird SQL
Jun 16, 2013 @ 20:42:46
ejgtuc
Mar 30, 2017 @ 20:08:54
TEXT TO lcAux NOSHOW
SELECT codigo, tipo,
CASE CHAR_LENGTH(TRIM(codigo))
WHEN 1 THEN descrip
WHEN 2 THEN ‘ ‘+TRIM(descrip)
WHEN 3 THEN ‘ ‘+TRIM(descrip)
WHEN 5 THEN ‘ ‘+TRIM(descrip)
END
FROM codagrup
ORDER BY codigo
ENDTEXT
HOLA Walter, intente lo que ves en la presente y me da error, que sera?. La idea es que segun el largo de la columna codigo me indente la columna descrip. Gracias desde ya
wrov
Mar 31, 2017 @ 01:18:15
El problema es que estás usando el símbolo más (+) para concatenar strings y en Firebird se usan dos barras (||) para concatenar.
Saludos.
Walter.
ejgtuc
Mar 31, 2017 @ 10:28:32
Claro. Muchas Gracias, voy a probar y lo comento.
ejgtuc
Mar 31, 2017 @ 12:36:55
Listo, eso era, quedo perfecto, muchas gracias por contestar.