2012-08-01 2 views
1

Извините, название не так велико, мягко говоря.SQL: Как сделать условное ОБНОВЛЕНИЕ

В моей таблице CUSTOMER у меня есть 4 столбца для телефонных номеров: P1, P2, P3, P4. И у меня также есть 1 столбец, который говорит мне, что телефонных номеров вообще нет: NOPHONE со значением 1 или 0 (я знаю, это звучит глупо, но это долгая история, так что так оно и есть.)

Когда у меня нет номера телефона, значение равно 1 (у него также есть причина).

Теперь, что я должен сделать, ОБНОВЛЯЕТ все номера телефонов, которые имеют 0, и измените значение на NULL ... за исключением тех записей, которые имеют NOPHONE = 1 (и будут иметь P1 = P2 = P3 = P4 = 0), которые должны оставаться такими, какими они являются (то есть 0).

Как это сделать в 1 инструкции SQL?

Спасибо!

ответ

2
UPDATE Customer 
SET P1 = NULLIF(P1, 0), P2 = NULLIF(P2, 0), P3 = NULLIF(P3, 0), P4 = NULLIF(P4, 0) 
WHERE NOPHONE = 0 
3

Используйте инструкцию CASE, чтобы условно установить значение. Если вы хотите сохранить текущее значение, просто установите его для себя. В предложении WHERE проверяется, что необходимо изменить хотя бы один столбец.

UPDATE CUSTOMER 
SET 
    P1 = CASE WHEN P1 = 0 THEN NULL ELSE P1 END, 
    P2 = CASE WHEN P2 = 0 THEN NULL ELSE P2 END, 
    P3 = CASE WHEN P3 = 0 THEN NULL ELSE P3 END, 
    P4 = CASE WHEN P4 = 0 THEN NULL ELSE P4 END 
WHERE NOPHONE = 0 
    AND (P1 = 0 OR P2 = 0 OR P3 = 0 OR P4 = 0) 

Ваш NOPHONE Логика кажется обратным. Интуитивно я ожидал бы NOPHONE = 1, чтобы указать, что телефонных номеров нет, но ваш вопрос сформулирован именно так. !

+1

Я думаю, что нужно добавить условие ASW откусит и NOPHONE = 1 –

+0

@JoeGJoseph Пропущенный что, благодаря – Yuck

+0

@Yuck - это была опечатка, следующий parragraph был прав. Во всяком случае, я исправился. Это означает, что вы должны сказать WHERE NOPHONE = 0, правильно? Благодарю. – Amarundo

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