Pergunta

I tem uma tabela de temperatura que tem valores inteiros numéricos em uma coluna. Eu quero substituir os valores inteiros com valores de caractere com base em alguns critérios ou eu quero adicionar outra coluna de tipo de caractere que insere automaticamente os valores em si com base em alguns critérios.

Se x <= 1, mude para "SP" ou fazer nova coluna e loja de "SP" nessa linha
Se x> 1, mude para "FA" ou fazer nova coluna e armazenar "FA" nessa linha
Além disso, os comandos alter não são permitidos em tabelas temporárias na minha versão do Informix.

Foi útil?

Solução

SELECT id, yr, CASO QUANDO yr_offset <= 1 então "SP" else "FA" END CASE

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

Outras dicas

Você está correto, você não pode alterar uma tabela temporária. Adicionando uma coluna extra com este valor derivado pode ser feito com uma declaração CASE, ou seja:

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

O casting (ou seja, os parênteses e ::CHAR(2)) provavelmente não são necessárias.

Se a lógica pode ser expressa como zero / não-zero (não está claro no seu exemplo se yr_offset pode ser negativo), então é ainda mais simples:

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

Mais detalhes sobre a sintaxe caso desde o manual

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top