达梦update能套select(case when)嘛
时间: 2023-11-12 18:05:10 浏览: 295
达梦数据库中的UPDATE语句是可以嵌套SELECT语句和CASE WHEN语句的。具体实现方式如下:
```
UPDATE table_name
SET column_name = (SELECT CASE WHEN condition THEN value1 ELSE value2 END
FROM another_table
WHERE condition2)
WHERE condition3;
```
其中,table_name表示要更新的表名,column_name表示要更新的列名,condition3表示更新的条件。在SET子句中,可以使用子查询和CASE WHEN语句来设置要更新的值。在子查询中,可以通过条件语句和连接操作获取需要的数据。
相关问题
DECLARE @nmSupport NUMERIC(14,4),@nmOutst NUMERIC(14,4),@chPart VARCHAR(16) SELECT @chPart = 'XXX' SELECT @nmOutst = 0 SELECT @nmSupport = 0 UPDATE acdb.PAC06.AC06004A SET nmSupport = CASE WHEN chPart = @chPart THEN CASE WHEN nmQty > @nmOutst THEN @nmOutst ELSE nmQty END ELSE CASE WHEN nmQty > nmOutst THEN nmOutst ELSE nmQty END END, nmOutst = CASE WHEN chPart = @chPart then case when @nmOutst>=@nmSupport then @nmOutst-@nmSupport else 0 end else nmOutst-nmSupport END, @nmOutst = CASE WHEN chPart = @chPart then case when @nmOutst>=@nmSupport then @nmOutst-@nmSupport else 0 end else nmOutst-nmSupport END, @nmSupport = case when chPart = @chPart then case when nmQty > @nmOutst then @nmOutst else nmQty end ELSE CASE WHEN nmQty > nmOutst THEN nmOutst ELSE nmQty END end, @chPart = chPart
这段代码是一个 SQL Server 的存储过程或者脚本,其中包含了一些变量的定义和赋值。具体来说,这段代码的作用是:
1. 声明了三个变量 @nmSupport、@nmOutst 和 @chPart,分别是数值类型和字符类型;
2. 把 @chPart 变量的值设为 'XXX';
3. 把 @nmOutst 变量的值设为 0;
4. 把 @nmSupport 变量的值设为 0;
5. 更新了 acdb.PAC06.AC06004A 表中的 nmSupport 和 nmOutst 字段,具体更新方式如下:
- 如果 chPart 字段等于 @chPart 变量的值,则 nmSupport 字段的值为 @nmOutst 和 nmQty 两者中较小的一个,nmOutst 字段的值为 @nmOutst 和 @nmSupport 的差值(如果 @nmOutst 大于等于 @nmSupport),或者为 0(如果 @nmOutst 小于 @nmSupport);
- 如果 chPart 字段不等于 @chPart 变量的值,则 nmSupport 字段的值为 nmQty 和 nmOutst 两者中较小的一个,nmOutst 字段的值为 nmOutst 和 nmSupport 的差值;
6. 最后,更新了 @nmOutst、@nmSupport 和 @chPart 变量的值,使其与更新后的表中的对应字段值相同或者符合上述条件。
update case when用法
UPDATE CASE WHEN用于更新表中的数据,在更新时可以根据条件来判断需要更新哪些数据,类似于SELECT CASE WHEN的用法。
语法如下:
```
UPDATE 表名 SET 列名 = CASE
WHEN 条件1 THEN 新值1
WHEN 条件2 THEN 新值2
ELSE 列名
END
WHERE 条件;
```
其中,CASE语句中的WHEN条件可以有多个,ELSE表示如果满足以上条件均不成立时,更新的值保持不变。
示例:将表中所有性别为男性的用户身高增加5cm,女性的身高增加3cm。
```
UPDATE users SET height = CASE
WHEN gender = 'male' THEN height + 5
WHEN gender = 'female' THEN height + 3
ELSE height
END
WHERE 1 = 1; -- 1=1表示更新所有记录
```
上述示例中,CASE语句判断了性别为男的用户和性别为女的用户,更新他们的身高。如果用户是其他性别,则保持身高不变。根据WHERE条件,更新了表中所有记录的身高。
阅读全文