SQL - Informix - Cambiando il tipo di dati di una colonna da numerico a carattere
Domanda
Ho una tabella temporanea che ha valori interi numerici in una colonna. Voglio sostituire i valori interi con valori di carattere sulla base di alcuni criteri o voglio aggiungere un'altra colonna di tipo di carattere che inserisce automaticamente i valori in se stessa sulla base di alcuni criteri.
Se x <= 1, il cambiamento a "SP" o fare nuova colonna e deposito "SP" in quella riga
Se x> 1, passare alla "FA" o fare nuova colonna e memorizzare "FA" in quella fila
Inoltre, alterare comandi non sono ammessi su tabelle temporanee nella mia versione di Informix.
Soluzione
id SELECT, yr, CASO QUANDO yr_offset <= 1 THEN "SP" ELSE "FA" END CASE
http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls909.htm
Altri suggerimenti
Hai ragione, non è possibile modificare una tabella temporanea. L'aggiunta di una colonna in più con questo valore derivato può essere fatto con una dichiarazione CASE
, vale a dire:
SELECT enroll.ud, enroll.yr, (CASE
WHEN enrollsess.yr_offset <=1 THEN "FA"
ELSE "SP" END)::CHAR(2) AS sess, ...
Il casting (cioè le parentesi e ::CHAR(2)
) probabilmente non sono necessari.
Se la logica può essere espresso come zero / non-zero (non si capisce bene nel tuo esempio, se yr_offset può essere negativo), allora è ancora più semplice:
SELECT enroll.id, enroll.yr,
DECODE(enrollsess.yr_offset, 0, "FA", "SP")::CHAR(2) AS sess, ...
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;