2009-02-10 5 views
1

У меня есть временная таблица с числовыми целыми значениями в одном столбце. Я хочу либо заменить целочисленные значения символьными значениями на основе некоторых критериев, либо я хочу добавить еще один столбец типа символа, который автоматически вставляет значения в себя на основе некоторых критериев.SQL - Informix - Изменение типа данных столбца от числа до символа

Если х < = 1, переход к «SP» или сделать новый столбец и магазин «SP» в этой строке
Если х> 1, изменение в «FA» или сделать новый столбец и магазин «FA» в том, что строка

Кроме того, в моей версии Informix команды изменения не разрешены в временных таблицах.

+0

Это помогает уточнить версия IDS - или другого сервера базы данных Informix - особенно если вы должны упомянуть «в моей версии». –

+0

Мне не нужно было упоминать об этом, я не думаю - как мне получить версию? никто, кажется, не знает этого, и руководства, которые у нас есть, устарели – CheeseConQueso

ответ

1

ВЫБРАТЬ идентификатор, год, случай, когда yr_offset < = 1 THEN "SP" ELSE "FA" END СЛУЧАЙ

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

+0

классный, который сработал тоже ... но я должен был явно указать раздел «из» после окончания дела - не ваша ошибка, я никогда не упоминал имя таблицы temp, которую я пытался определить – CheeseConQueso

0
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; 
+0

Не могли бы вы сделать инструкцию CASE? – avgbody

1

Вы правы, вы не можете изменить временную таблицу. Добавление дополнительного столбца с этим полученным значением может быть сделано с CASE заявления, а именно:

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

Разливочным (т.е. круглых скобки и ::CHAR(2)), вероятно, не нужны.

Если логика может быть выражена как нулевой/ненулевой (не ясно, в вашем примере, если yr_offset может быть отрицательным), то это еще проще:

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

More details on CASE syntax from the manual

Смежные вопросы