0

我希望能够组合这三个更新语句,所以我不必单独运行它们。我通常会输入多个“产品”和多个“篮子”。

这个想法是能够基于“fieldB”在“5”和“10”之间或“fieldB”>“10”之间更新两个字段,而无需运行三个单独的查询。

非常感谢任何帮助。

UPDATE table
set fieldA = round(8.7 * fieldA,0),
    fieldB = round(8.7 * fieldB,0)                                                                               
where product in ('APPLE','BANANA')
and basket IN ('BROWN BASKET','RED BASKET','YELLOW BASKET','BLUE BASKET')
and fieldB < '5';

UPDATE table
set fieldA = round(4.3 * fieldA,0),
    fieldB = round(4.3 * fieldB,0)                                                                               
where product in ('APPLE','BANANA')
and basket IN ('BROWN BASKET','RED BASKET','YELLOW BASKET','BLUE BASKET')
and fieldB between '5' and '10';

UPDATE table
set fieldA = round(2.5 * fieldA,0),
    fieldB = round(2.5 * fieldB,0)                                                                               
where product in ('APPLE','BANANA')
and basket IN ('BROWN BASKET','RED BASKET','YELLOW BASKET','BLUE BASKET')
and fieldB > '10';
4

2 回答 2

3

您可以使用CASE语句,语法可能取决于 RDBMS:

UPDATE table
SET fieldA = CASE WHEN fieldB < '5' THEN round(8.7 * fieldA,0)
                  WHEN fieldB BETWEEN '5' AND '10' THEN round(4.3 * fieldA,0)
                  WHEN fieldB > '10' THEN round(2.5 * fieldA,0)
             END
    ,fieldB = CASE WHEN fieldB < '5' THEN round(8.7 * fieldB,0) 
                  WHEN fieldB BETWEEN '5' AND '10' THEN round(4.3 * fieldB,0) 
                  WHEN fieldB > '10' THEN round(2.5 * fieldB,0)  
             END                                                                            
where product in ('APPLE','BANANA')
and basket IN ('BROWN BASKET','RED BASKET','YELLOW BASKET','BLUE BASKET')
于 2013-07-17T20:22:21.553 回答
2

我认为您想要的意图是:

UPDATE table
    set fieldA = round((case when fieldB < '5' then 8.7 * fieldA
                             when fieldB between '5' and '10' then 4.3 * FieldA
                             when fieldB > '10' then 2.5 * fieldA
                        end), 0),
        fieldB = round((case when fieldB < '5' then 8.7 * fieldB
                             when fieldB between '5' and '10' then 4.3 * FieldB
                             when fieldB > '10' then 2.5 * fieldB
                        end), 0)                                                                               
    where product in ('APPLE', 'BANANA') and
          basket IN ('BROWN BASKET', 'RED BASKET', 'YELLOW BASKET', 'BLUE BASKET');

但是,这并不是您的原始更新所做的。问题是您正在重置fieldB每次更新中的值。因此,如果FieldB最初为 1,那么它将被设置为8.7 * FieldB= 8.7。这将被第二次更新捕获,依此类推。

如果这种级联是意图,那么算术将略有不同。但是,条件更新背后的想法是相同的。

于 2013-07-17T20:23:31.820 回答