SQL Server打印多次时相同值的情况 - 然后distinct不会有帮助

问题描述 投票:0回答:2

对于每天记录的资金交易不超过一次的数据库,计算所有回购中心的总现金余额。

所以上面问题的解决方案是

select distinct
    ((select sum(inc) from income_o) - (select sum(out) from outcome_o))

解决方案很好用。但是,我需要检查表中是否存在记录,所以我在我的解决方案中引入case语句。

select CASE 
    when (SELECT COUNT(*) FROM income_o) = 0 
    then 0
    when (SELECT COUNT(*) FROM outcome_o) = 0 
    then 0
    else (select distinct ((select sum(inc) from income_o) - (select sum(out) from outcome_o)))
    end as result 
from income_o

之后我得到重复的结果:

myResult
-----------
28985.9600
28985.9600
28985.9600
28985.9600
28985.9600
28985.9600
28985.9600
28985.9600
28985.9600

我需要收到什么

28985.9600

我该如何解决?

sql sql-server tsql
2个回答
0
投票

您可以将其放在子查询中,并在外部执行以下操作:

select distinct result from
(
    select CASE 
        when (SELECT COUNT(*) FROM income_o) = 0 
        then 0
        when (SELECT COUNT(*) FROM outcome_o) = 0 
        then 0
        else (select distinct ((select sum(inc) from income_o) - (select sum(out) from outcome_o)))
        end as result 
    from income_o
) a

或者你也可以做一些不同的案例价值

select distinct CASE 
    when (SELECT COUNT(*) FROM income_o) = 0 
    then 0
    when (SELECT COUNT(*) FROM outcome_o) = 0 
    then 0
    else (select distinct ((select sum(inc) from income_o) - (select sum(out) from outcome_o)))
    end as result 
from income_o

0
投票

删除'from income_o'后,您将获得正确的结果,否则结果将显示与income_o相同的行数

select CASE 
    when (SELECT COUNT(*) FROM income_o) = 0 
    then 0
    when (SELECT COUNT(*) FROM outcome_o) = 0 
    then 0
    else (select distinct ((select sum(inc) from income_o) - (select sum(out) from outcome_o)))
    end as result 
© www.soinside.com 2019 - 2024. All rights reserved.