加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 选择sum和inner join

发布时间:2020-12-12 06:47:27 所属栏目:MsSql教程 来源:网络整理
导读:我有两张桌子 票据:id金额参考 交易:id参考金额 以下SQL查询 SELECT *,(SELECT SUM(amount) FROM transactions WHERE transactions.reference = bils.reference) AS paidFROM billsGROUP BY id HAVING paidamount 是表格Bills中的某些行,添加了一个用相关交
我有两张桌子

>票据:id金额参考
>交易:id参考金额

以下SQL查询

SELECT 
   *,(SELECT SUM(amount) 
    FROM transactions 
    WHERE transactions.reference = bils.reference) AS paid
FROM bills
GROUP BY id HAVING paid<amount

是表格Bills中的某些行,添加了一个用相关交易金额总和支付的列.

但是,它仅在每个账单至少有一笔交易时才有效.否则,不返回无交易账单的行.

也许,那是因为我应该做一个内部联接!

所以我尝试以下方法:

SELECT 
   *,(SELECT SUM(transactions.amount) 
    FROM transactions 
    INNER JOIN bills ON transactions.reference = bills.reference) AS paid
FROM bills
GROUP BY id 
HAVING paid < amount

但是,这会返回所有行的相同付费值!我究竟做错了什么 ?

解决方法

使用左连接而不是子查询:
select b.id,b.amount,b.paid,sum(t.amount) as transactionamount
from bills b
left join transactions t on t.reference = b.reference
group by b.id,b.paid
having b.paid < b.amount

编辑:
要将事务总和与金额进行比较,请处理没有事务时获得的空值:

having isnull(sum(t.amount),0) < b.amount

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读