首页
学习
活动
专区
圈层
工具
发布

空运算
EN

Stack Overflow用户
提问于 2015-07-22 06:00:17
回答 4查看 6K关注 0票数 5
代码语言:javascript
复制
LedgerId    AccountId   EntryType   Debit       Credit      
2               2           D       50000.00    NULL        
3               2           D       10000.00    NULL        
4               2           C       NULL        25000.00    
6               2           C       NULL        10000.00    
7               2           D       89000.00    NULL        
8               2           D       89000.00    NULL        
10              3           D       715871.00   NULL        

下面的查询计算Balance

代码语言:javascript
复制
Select Accounts.ID [AccountID],Name,AccountType [AccountType], SUM(Debit) - SUM(Credit) [Balance] FROM Accounts 
    join Dealers on Accounts.DealerId = Dealers.ID 
    join Ledger on Accounts.ID = Ledger.AccountId
    GROUP BY Accounts.ID, Name, AccountType

它还会:

代码语言:javascript
复制
AccountID   Name    AccountType     Balance
2           Mateen  P               203000.00
3           Shery   P               NULL

预期产出:

代码语言:javascript
复制
AccountID   Name    AccountType     Balance
2           Mateen  P               203000.00
3           Shery   P               715871.00

帐户3的Balance是Null,当从null中减去任何内容时,它返回null

例如,

代码语言:javascript
复制
select 5 - NULL

返回NULL

的问题:现在,我怎样才能得到Balance而不是NULL

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-22 06:01:25

您可以使用coalesce

代码语言:javascript
复制
coalesce(sum(Debit), 0) - coalesce(sum(Credit), 0)
票数 4
EN

Stack Overflow用户

发布于 2015-07-22 06:03:53

尝试使用isnull(value,0),它将接受空值为0。

代码语言:javascript
复制
Select Accounts.ID [AccountID],Name,AccountType [AccountType], 
 SUM(isnull( Debit,0)) - SUM(isnull(Credit,0)) isnull([Balance],0) as 
   Balance FROM Accounts 
     join Dealers on Accounts.DealerId = Dealers.ID 
     join Ledger on Accounts.ID = Ledger.AccountId
GROUP BY Accounts.ID, Name, AccountType
票数 2
EN

Stack Overflow用户

发布于 2015-07-22 06:15:49

如果存在空值问题,则SUM聚合函数将忽略空值。如果找到空值,合并函数将用0替换它。

代码语言:javascript
复制
    Select Accounts.ID [AccountID],
           Name,
           AccountType [AccountType], 
           SUM(coalesce(Debit,0)) - SUM(coalesce(Credit,0)) [Balance] 
FROM       Accounts 
           join Dealers on Accounts.DealerId = Dealers.ID 
           join Ledger on Accounts.ID = Ledger.AccountId
           GROUP BY Accounts.ID, Name, AccountType 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31554998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档