2016-11-10 3 views
0

Я пытаюсь обновить несколько записей в моей таблице SQL. Мои данные выглядит следующим образомОбновление нескольких записей с несколькими условиями

Name 
Record1_Name 
Record1_Name_something 
Record2_Data_Name 
Record2_Name_something 

Результаты должны быть

Name 
Record1 
Record2 
Record2_Data 

Вот код, который я до сих пор

UPDATE Table1 
SET Column1 = 
CASE 1 
WHEN '%Record1%' THEN 'Record1' 
WHEN '%Record2%' AND '%Data%' THEN 'Record2_Data' 
WHEN '%Record2%' AND NOT '%Data%' Then 'Record2' 

Первый, когда работает без вопроса. Второй я добавляю AND, но он терпит неудачу. Я знаю, что синтаксис отключен на последнем, но это то, что мне нужно будет попробовать.

ответ

3

Я думаю, что вы ищете что-то этого:

UPDATE Table1 
SET Column1 = CASE 
       WHEN Column1 LIKE '%Record1%' THEN 'Record1' 
       WHEN Column1 LIKE '%Record2%' AND Column1 LIKE '%Data%' THEN 'Record2_Data' 
       WHEN Column1 LIKE '%Record2%' AND Column1 NOT LIKE '%Data%' Then 'Record2' 
       ELSE 'Record3' 
       END 

Примечание: Вам необходимо указать значение, которое возвращается в случае, если ни один из примеров логических выражений выполняется. В противном случае CASE возвращает NULL.

+0

Дерьмо да мой синтаксис был выключен. Я много раз пытался, я потерял свое заявление LIKE. Спасибо. – maltman

+0

На самом деле я просто попробовал одно утверждение, и я получаю сообщение об ошибке «Не могу вставить значение NULL в столбец столбца1, столбец не допускает значения NULL. Не могу понять, почему он пытается добавить null – maltman

+0

@maltman Это потому, что ни один из' WHEN'. Вы должны указать альтернативу, используя 'ELSE'. –

1

Я думаю, что ваш синтаксис случай выключен - https://dba.stackexchange.com/questions/154721/difference-in-results-between-case-syntax

это должно работать

`UPDATE Table1 

SET Column1 = CASE WHEN NAME LIKE '%Record1%' THEN 'Record1' WHEN NAME LIKE '%Record2%' 
      AND NAME LIKE '%Data%' THEN 'Record2_Data' WHEN NAME LIKE '%Record2%' 
      AND NAME NOT LIKE '%Data%' THEN 'Record2' end` 
+0

Да, я потерял LIKE где-то рядом с тестами. спасибо – maltman