要求用一句sql语句打印出A,B各剩了多少

表1(货物总数)
类型  总数
 A    900
 B    1000

表2(使用了的货物)
 类型  使用数
  A      20
  B      60
  A      11


现在要求用一句sql语句打印出A,B各剩了多少


--光full join,还不够,需要用isnull()函数,否则,都是空

--如:


--创建测试表T1
create table T1 (类型 varchar(100), 总数 int)

--追加测试数据
insert into T1 select 'A',    900
insert into T1 select 'B',    1000
insert into T1 select 'C',    1000

--创建测试表T2
create table T2 (类型 varchar(100), 使用数 int)

--追加测试数据
insert into T2 select 'A',      20
insert into T2 select 'B',      60
insert into T2 select 'A',      11


--你要的SQL语句
select 类型,sum(数量) as 剩余数量
from
    (
     select 类型,总数 as 数量
     from T1
     union all
     select 类型,使用数*(-1) as 数量
     from T2
    ) as t
group by 类型


select a.类型,(isnull(a.总数,0)-isnull(b.使用数,0)) as [剩余数量]
from T1 a
    full join (select  类型,sum(使用数)使用数 from T2 group by 类型)b
on a.类型=b.类型

--删除测试表
drop table T1,T2


/*

--结果

类型     剩余数量
A       869
B       940

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若♡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值