当特定列以特定测试开始时合并两列

时间:2017-03-29 11:06:25

标签: plsql oracle10g

我需要更改每行中的两列,其中" Color"列以特定值开始"叫喊"

我的表是:

+------+----------+----------+
| Name | Color    | Quantity |
+------+----------+----------+
| A    | <yell> U | 2        |
+------+----------+----------+
| B    | Blue     | 1        |
+------+----------+----------+
| C    | Red      | 4        |
+------+----------+----------+
| D    | <yell> A | 2        |
+------+----------+----------+

对于这个示例表,我有2行,其中列Collor以字符串&#34; Yell&#34;开头。 。我需要将该字段更改为黄色并将数量=数量-1更改为列&#34;数量&#34;

我只需要匹配Collor字符串的前6个字符。之后的内容可能因行而异。

所以我的表就是:

+------+--------+----------+
| Name | Color  | Quantity |
+------+--------+----------+
| A    | Yellow | 1        |
+------+--------+----------+
| B    | Blue   | 1        |
+------+--------+----------+
| C    | Red    | 4        |
+------+--------+----------+
| D    | Yellow | 1        |
+------+--------+----------+
你能帮帮我吗?我尝试过合并,但我做得不对。

2 个答案:

答案 0 :(得分:0)

这样的东西?

   update TABLENAME a
       set a.color = 'Yellow',
           a.quantity = a.quantity - 1
     where exists (select count(*)
              from TABLENAME t
             where substr(t.color, 1, 6) = substr(a.color, 1, 6)
             group by (substr(t.color, 1, 6))
            having count(*) > 1)

答案 1 :(得分:0)

这实际上只需要直接更新,至少直接指定。

update tablename 
  set color = 'Yellow';
    , quantity = quantity-1
where substr(color,1,6) = '<yell>' ; 

但是,您可能需要调整where子句中的字符串。因为它会在这里更新颜色值以及其他一些东西,但不会更新值&#39;黄色&#39;也没有&#39;&#39;,也没有其他变化。