Условные вставки SQL - PullRequest
       5

Условные вставки SQL

0 голосов
/ 07 апреля 2009

У меня есть следующая схема таблицы:

create table SerialNo2(
IncarnationID_UID counter primary key,
Mark integer
);

Теперь я хочу добавить новый столбец в таблицу, назовем его degree. Учитывая, что я хочу применить обновление к рабочей таблице, мне нужно будет заполнить столбец degree на основе значения Mark для всех существующих данных в таблице SerialNo2. Правило для этого заключается в том, что

if Mark>90 then degree='A',
else degree='B'

Как написать условную вставку SQL, которая будет выполнять вышеуказанную функцию?

Ответы [ 3 ]

5 голосов
/ 07 апреля 2009

Примерно так:

UPDATE SerialNo2 SET SerialNo2.Degree = IIf([Mark]>90,"A","B")
3 голосов
/ 07 апреля 2009

Сначала определите столбец градусов как обнуляемый, затем выполните ОБНОВЛЕНИЕ:

UPDATE SerialNo2
SET Degree = CASE WHEN Mark > 90 THEN 'A' ELSE 'B' END
0 голосов
/ 07 апреля 2009

Сначала создайте новый столбец (синтаксис режима запросов ANSI-92):

ALTER TABLE SerialNo2 ADD 
   Degree CHAR(1) DEFAULT 'B' NOT NULL;

Если вы немедленно запросите таблицу, у вас будет NULL в новом столбце ... что является серьезной ошибкой в ​​движке IMO, т. Е. Ему нужно было установить значение DEFAULT для каждой строки, однако теперь мы имеем столбец NOT NULL, содержащий NULL s !!

Так что нам нужно SET значение для каждой строки

UPDATE SerialNo2 
   SET Degree = IIF(Mark > 90, 'A', 'B');

Кстати, если у вас есть несколько значений для тестирования, а не вложенных IIF s, вы можете использовать ключевое слово SWITCH, используя TRUE valeu для предложения case case, например,

UPDATE SerialNo2 
   SET Degree = SWICTH(
                       Mark > 90, 'A', 
                       Mark <= 0, 'X', 
                       TRUE, 'B'
                      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...