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.

È stato utile?

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, ...

Maggiori dettagli sul sintassi CASE dal manuale

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top