查询 sql 语句,为null转换为0怎么做

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查询 sql 语句,为null转换为0怎么做相关的知识,希望对你有一定的参考价值。

例子
select ((select sum(S*R) from t_A b where b.ID = 3092 and b.OrderID = 512 and b.Ivt=1from t_B

update TABLE set 字段名=0 where isnull(字段名)

把字段名改为你的实际字段名,TABLE改为你实际表名。追问

update T_Product set TotalQuantity = TotalQuantity + isnull((select sum(SSQuan*RCKState) from T_OrderItem b where b.PrdID = 3092 and b.OrderID = 512 and b.IvtBkorNot=0),0) where PrdID = 3092

是不是这样呀,,但是不行呀?

参考技术A oracle的话用nvl。
如:select nvl(null,0) a from dual

mysql的话用ifnull。
如:select ifnull(null,0) a from dual

其它数据库的不懂
参考技术B ISNULL(字段名称,0)追问

update T_Product set TotalQuantity = isnull(TotalQuantity,0) + isnull((select sum(SSQuan*RCKState) from T_OrderItem b where b.PrdID = 3092 and b.OrderID = 512 and b.IvtBkorNot=0),0) where PrdID = 3092
是不是这样呀,但是不行呀?

追答

你update少了个U,第二,我没你这么用过,我一般是这么用,(select isnull(sum(SSQuan*RCKState) ,0)from T_OrderItem b where b.PrdID = "+PrdID+" and b.OrderID = "+ID+" and b.IvtBkorNot=0)

不过你可以都运行下,试试看看哪个行,如果你敲的可以运行,请告诉我下

追问

我试过了不行,,问题是我后面带的条件,我要对这结果集isnull才行,

追答

都不行,还是只有你的不行?说详细点,我好帮你解决

追问

update T_Product set TotalQuantity = TotalQuantity+ (select sum(SSQuan*RCKState) from T_OrderItem b where b.PrdID = 3092 and b.OrderID = 512 and b.IvtBkorNot=0) where PrdID = 3092

这个语句,查询的结果是为null,如果为null的话就为0,
怎么做

追答

第一种代码,这种代码你看看能不能得出正确结果
update T_Product set TotalQuantity = TotalQuantity+ (select isnull(sum(SSQuan*RCKState) ,0)from T_OrderItem b where b.PrdID = 3092 and b.OrderID = 512 and b.IvtBkorNot=0) where PrdID = 3092
第二种代码
declare @Num int
set @Num = (select isnull(sum(SSQuan*RCKState) ,0)from T_OrderItem b where b.PrdID = 3092 and b.OrderID = 512 and b.IvtBkorNot=0)
update T_Product set TotalQuantity = TotalQuantity+@Num where PrdID = 3092

追问

你可能,没有明白我的意思,
你看这语句其中的 select sum(SSQuan*RCKState) from T_OrderItem b where b.PrdID = 3092 and b.OrderID = 512 and b.IvtBkorNot=0,这后面条件b.IvtBkorNot=0,很重要,
我要把这语句(select sum(SSQuan*RCKState) from T_OrderItem b where b.PrdID = 3092 and b.OrderID = 512 and b.IvtBkorNot=0)
判断,如果为null,就为零

追答

我知道你的意思,无论你后面的条件有多少,你选出来的数据,始终是 sum(SSQuan *RCKState)
而你要加的数据也是他,所以,你可以判断,如果为null,就赋值0
我给你的语句,你可以运行下,必定能得到正确的数据

追问

你还是不明白,我update了两条语句。1是当IvtBkorNot=0,2是IvtBkorNot=1,我是批量审核,带更新,
其中有IvtBkorNot=0和IvtBkorNot=1,我主要是根据这个IvtBkorNot字段来更新数据的,
比如我有十条数据,批量更新的话,其中有的IvtBkorNot=0,和IvtBkorNot=1,
这意思分别我次货,和正货

追答

你这种情况一般使用游标

以上是关于查询 sql 语句,为null转换为0怎么做的主要内容,如果未能解决你的问题,请参考以下文章

访问语句转换为 Sql

sql语句常用功能(null值转换为0)

sql中如何将已经赋值的字段变为原有的null

在SQL语句里怎么转换数据类型?

如何在查询语句中把空值(null),输出为0?

Sql PIVOT,如何使用 PIVOT 将结果中的 NULL 转换为值 0