Pregunta

Tengo una tabla temporal que tiene valores numéricos enteros en una columna.Quiero reemplazar los valores enteros con valores de caracteres según algunos criterios o quiero agregar otra columna de tipo de carácter que inserte valores automáticamente en sí misma según algunos criterios.

Si x <= 1, cambie a "SP" o cree una nueva columna y almacene "SP" en esa fila
Si x > 1, cambie a "FA" o cree una nueva columna y almacene "FA" en esa fila

Además, los comandos de modificación no están permitidos en tablas temporales en mi versión de Informix.

¿Fue útil?

Solución

SELECT id, yr, CASE CUANDO yr_offset <= 1 entonces "SP" ELSE "FA" END CASE

http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls909.htm

Otros consejos

Tiene razón, no se puede modificar una tabla temporal. Adición de una columna adicional con este valor derivado se puede hacer con una declaración CASE, es decir:

SELECT enroll.ud, enroll.yr, (CASE
   WHEN enrollsess.yr_offset <=1 THEN "FA"
   ELSE "SP" END)::CHAR(2) AS sess, ...

la pieza de fundición (es decir, los paréntesis y ::CHAR(2)) probablemente no son necesario.

Si la lógica se puede expresar como / no-cero cero (no es claro en su ejemplo, si yr_offset puede ser negativo), entonces es aún más simple:

SELECT enroll.id, enroll.yr,
     DECODE(enrollsess.yr_offset, 0, "FA", "SP")::CHAR(2) AS sess, ...

Para más detalles sobre la sintaxis caso desde el manual de

SELECT          enrollsess.id,
                enrollsess.yr,
                "SP" sess
FROM            enrollsess
WHERE           enrollsess.yr_offset <= 1
UNION
SELECT          enrollsess.id,
                enrollsess.yr,
                "FA" sess
FROM            enrollsess
WHERE           enrollsess.yr_offset > 1
INTO            TEMP enrollsess2 WITH NO LOG;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top