SQL Update Multiple Rows值基于同一行

时间:2014-08-04 12:51:34

标签: sql sql-server sql-update

我们有一张包含所有产品的表格。这里有一个名为UNITMEASURE的列。此列填充了诸如" EA,PR,PK,YD等的值"。偶尔会有1填充到此列中。我想运行一个更新语句来将1改为其他值。

例如:

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

我希望能够通过一个查询将所有PRODUCT 1234系列的PRIT和PRODUCT 4321的UNITMEASURE更新为EA(从1开始),但我完全难以接受。这可能会发生超过8,000种产品,因此我想查找UNITMEASURE<> ' 1'并从每个产品的更新。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试这种方式:

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

答案 2 :(得分:0)

以下查询不会影响具有UNITMEASURE&lt;&gt;的其他记录&#39; 1&#39;

这取决于您的架构。如果您有1500个产品,则它必须位于某个主表中且具有一些UNITMEASURE值。你可以编写子查询来获得它。

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

答案 3 :(得分: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'