在SQL Server中为SUM函数应用OR条件及生成Balance列的实现
在SQL Server中生成Balance列的解决方案
嘿,这个需求其实很好实现,SQL Server提供了几个内置函数可以直接满足你的规则,我给你列两种常用的方法:
方法1:使用COALESCE函数(推荐,ANSI标准通用)
COALESCE函数的核心作用就是返回参数列表里第一个非NULL的值,完美匹配你的需求逻辑:
- 如果Debit列有值,直接返回Debit的内容
- 如果Debit是NULL,就取Credit列的值
- 要是两列都有值,会返回排在参数列表前面的那个(下面例子里优先Debit,你可以调换顺序来优先取Credit)
对应的SQL代码:
SELECT Debit, Credit, COALESCE(Debit, Credit) AS Balance FROM YourTableName;
如果业务需要两列都有值时优先取Credit,只需要调整参数顺序:
COALESCE(Credit, Debit) AS Balance
方法2:使用ISNULL函数(SQL Server专属)
ISNULL是SQL Server特有的函数,只能接受两个参数——如果第一个参数是NULL,就返回第二个参数的值,否则直接返回第一个参数,逻辑和上面的场景适配度也很高。
代码示例:
SELECT Debit, Credit, ISNULL(Debit, Credit) AS Balance FROM YourTableName;
额外处理:两列都为NULL的情况
如果你的数据存在Debit和Credit都为NULL的行,想要给Balance设置一个默认值(比如0),可以这样扩展:
-- COALESCE的写法,直接加默认值参数 COALESCE(Debit, Credit, 0) AS Balance -- ISNULL的写法,需要嵌套调用 ISNULL(ISNULL(Debit, Credit), 0) AS Balance
拿你给出的示例数据测试的话,最后一行1500 1500会返回1500(具体取哪一列取决于你设置的优先级),完全符合需求。
内容的提问来源于stack exchange,提问作者Doonie Darkoo
相关产品推荐
相关产品推荐

