2014-08-04 3 views
1

У нас есть таблица, содержащая все наши продукты. Здесь находится столбец UNITMEASURE. Этот столбец заполняется такими значениями, как «EA, PR, PK, YD и т. Д.». Иногда в эту колонку попадает 1. Я хотел бы запустить оператор обновления, чтобы изменить значение 1 на любые другие значения.Значение обновления нескольких обновлений SQL по той же строке

Например:

PRODUCT UNITMEASURE 
1234  1 
1234  1 
1234  PR 
1234  1 
1234  1 
4321  1 
4321  1 
4321  EA 
4321  1 
4321  1 

Я хочу, чтобы иметь возможность обновлять UNITMEASURE для всех линий PRODUCT 1234 до PR и PRODUCT 4321 в EA (от 1) с одним запросом, но я полностью тупик. Есть более 8000 продуктов, с которыми это может случиться, поэтому я хотел бы найти UNITMEASURE <> '1' и обновить его для каждого продукта.

ответ

0

Попробуйте так:

update producttable 
set UNITMEASURE = case WHEN PRODUCT = 1234 
         THEN = 'PR' 
         WHEN PRODUCT = 4321 
         THEN = 'EA' 
         ELSE = UNITMEASURE 
        END 

для обновленного вопроса

update producttable 
set UNITMEASURE = PT2.UNITMEASURE 
from producttable PT 
join (select UNITMEASURE, PRODUCT 
     from producttable 
     UNITMEASURE <> 1) PT2 
    on PT.PRODUCT = PT2.PRODUCT 
where PT.UNITMEASURE = 1 
+0

Просто добавил новую ноту на вопрос: Есть более 8000 продуктов, к которым это может произойти, поэтому я хотел бы для поиска в UNITMEASURE <> «1» и обновление от этого для каждого продукта. – TripleNad

+0

@TripleNad Я обновил ответ – Parado

+0

Это то, что я искал! В предложении Select было предложение Where, но мы все права человека? :) Благодаря! – TripleNad

0

Попробуйте так:

update yourtable 
    set UNITMEASURE = (case when PRODUCT=1234 then 'PR' 
          when PRODUCT=4321 then 'EA' 
          else UNITMEASURE 
          end) 
where UNITMEASURE <> 1 
+0

Просто добавлено новое примечание к вопросу: Есть более 8000 продуктов, из которых это может произойти, поэтому я хотел бы найти UNITMEASURE < > '1' и обновить его для каждого продукта. – TripleNad

+0

@TripleNad Ваш оригинальный вопрос заявил, что вы обновляете его с 1 так. Ответ на это был прав. Я отредактирую его. –

+0

Понял, но я не хочу, чтобы определить 8000, когда/then заявления для каждого отдельного продукта, который у нас есть, что это может произойти. Я ищу способ определить UNITMEASURE автоматически в зависимости от значения <> '1' – TripleNad

0

После запроса не будет влиять на другие записях, которые имеют UNITMEASURE <> ' 1 '

Это зависит от вашей схемы. Если у вас есть 1500 продуктов, это должно быть в некоторой мастер-таблице с некоторым значением UNITMEASURE. вы можете просто написать суб-запрос, чтобы получить это.

update yourtable 
    set UNITMEASURE = (case when PRODUCT=1234 then 'PR' 
          when PRODUCT=4321 then 'EA' 
          else UNITMEASURE 
          end) 
where UNITMEASURE <> 1 
+0

Понял, но я не хочу, чтобы определить 8000, когда/then заявления для каждого отдельного продукта у нас есть, что это может случиться. Я ищу способ определить UNITMEASURE автоматически на основе значения <> '1' – TripleNad

+0

Вы хотите обновить столбец UNITMEASURE во время ввода? если да, то вы можете использовать триггер для вставки. –

0

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

UPDATE yourtable 
SET unitmeasure = n.unitmeasure 
FROM yourtable y 
INNER JOIN yourtable n ON n.product = y.product 
WHERE y.unitmeasure = '1' 
AND n.unitmeasure <> '1' 
Смежные вопросы