sql server 如何改变计算结果的值 如null改变为0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server 如何改变计算结果的值 如null改变为0相关的知识,希望对你有一定的参考价值。

如何把表中的null都改为0
我知道isnull(xx, 0);
但是我不知道在我这些查询语句中怎么用

你这个null不是计算产生的,而是最后行转列时的空值(其实是没有的值)。所以isnull不好使。
比如客服凡生,他只有地下城与勇士的数据,其他数据没有,那么行转列以后,其他没有的值自然就是空值,这个和前面的统计没有什么关系的。
个人觉得有两个办法:
(1)再套一层,但是我记得这种行转列的数据,好像不认列名(转列后的列名),你可以试试,如果认列名,那么就再套一层,写几个isnull就行,如果不认,那么就做成视图,然后查询视图的时候再isnull一下,这个应该可以吧。
(2)还有一个办法就是弄一张写有所有行转列列名的表,然后让所有的“客服”和这张表cross join,然后再进行计算,不过这样的话,总感觉有些小题大做,为了个0,搞这么多东西,似乎有些不值。追问

你说的第一个办法怎么写啊 我是初学者不知道再套一层怎么写

追答

就是在这个语句外层在写一层select(现在这张表查询出来的内容,就可以作为字段了),不过我也说了,可能不能用,因为我记得行转列不认列名。可以试试视图,如果这个语句本身可以建立视图,那么应该就可以了。

追问

是这样写吗 报错了

追答

(1)请看全我的回答,会报错这事我写了两遍了,再说你的写法也不对。
(2)个人感觉,如果列名能用,记住说的是如果能用(毕竟我似乎记得是不能用,可能你会说不能用你告诉我干什么?我只能说这是一种可能,如果不能实现,只能说没有可能。)我用T表示你原来的语句(就是你查询出一堆null的那个),如果不行的话,可以试试建立视图(用你原来的那个语句建立视图),然后再在视图上应用这个查询试试。还不行就放弃吧,至少一条语句是搞不定的,如果为了一个0用第二种方式,那时完全得不偿失的。
select 客服,isnull(剑灵,0) as 剑灵 ,isnull(龙与地下城,0) as 龙与地下城, isnull(冒险岛2,0) as 冒险岛2,isnull(征途2s,0) as 征途2s,isnull(天涯明月刀,0) as 天涯明月刀,isnull(斗战神,0) as 斗战神,isnull(英雄联盟,0) as 英雄联盟 from T

追问

这样写对吗

参考技术A

sql server 中 ISNULL 有两个参数,第一个是字段名或变量,第二个是默认值 

读取数据时可以这样写

select [客服],ISNULL([英雄联盟],0) as [英雄联盟] from [OrderLog]

你那句里面count应该改成

SELECT Operator as [客服], ISNULL(COUNT(Operator),0) AS [单数] ...

追问

不可以哦 报错

追答

不是小括号哦,是方括号,字段名,表名这些可以用方括号括起来

追问

不理解你的意思 你写好让我看行么

追答

我上面写的就是方括号,你自己改的小括号

追问

报错

追答

你到底能不能看懂呢,我第一句写的是通常的用法,第二句是针对你那句的改法。
你这表里都没这个字段,肯定报错啦

追问

哦哦 我看错了 是这样吗

参考技术B

你看下图,把红框里的代码,写成绿框里的试试。

追问

不可以哦 还是null

追答

你试试把sum(单数),改成sum(isnull(单数,0)),再看看。

追问

我能加一下你vxin什么的嘛?

本回答被提问者采纳
参考技术C update TABLE set 字段名=0 where isnull(字段名)把字段名改为你的实际字段名,TABLE改为你实际表名。追问

没明白 能完整的帮我写到这个语句中吗 我不知道该写到哪

追答

UPDATE 表名 SET 剑灵= 0 WHERE isnull(剑灵)

追问

不行...

参考技术D

用case when吧,

select  case when sss is null then o else sss end as example where  xxxx;

就是这么个写法。

select isnull(xxx,0)  as xxx  where xxxxx

也是可以的。

SQL Server查询以获得结果

我具有如下表结构

id    pid   amount   drcr    residce  
1     33    1000         1        55  
2     32    2000         2        44  
3     33    1500         2        54

这里我想用drcr计算总和,返回值更大的值对于前。 1500 > 100,因此它应该为total = 500返回drcr = 2pid = 33我尝试使用Google搜索的内容,但一无所知。

答案

我认为您正在寻找条件聚合的形式

SELECT pid, SUM(CASE WHEN drcr = 2 THEN Amount ELSE -Amount END) 
FROM
(
  VALUES
  (1,     33,    1000,         1,        55),  
  (2,     32,    2000,         2,        44),  
  (3,     33,    1500,         2,        54)
) T(id, pid, amount, drcr, residce)
GROUP BY pid

这里是db<>fiddle

以上是关于sql server 如何改变计算结果的值 如null改变为0的主要内容,如果未能解决你的问题,请参考以下文章

如何用sqlserver 改变一个列按一定的顺序排列,

如何用从同一个表计算的值填充新列?

SQL 使用聚集函数时如何将null的列一起计算

在 SQL Server 中计算同一行中的值

sqlserver创建一个新表,求助

在SSMS中超链接SQL Server查询结果中的值