求一个SQL语句,两张表比较求值。

Redball 2006-03-12 07:20:52
库存表
产品ID,库存量
1 100
2 100
3 100
4 100
5 100

订单表
产品ID,订货量
1 80
2 100
3 300
4 200


就是比较两张表同一个产品ID的数量,当订单需求大于库存时,做一个运算,得到第三张表:
进货表
产品ID,进货量
3 200
4 100
...全文
215 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
changechange 2006-03-13
  • 打赏
  • 举报
回复

select 产品ID, sum(a) as 进货量 from (

select 产品ID,库存量*-1 as a from 库存表 union all select 产品ID,订货量 as a from 订单表

) as 中间表 group by 产品ID having sum(a)>0

xiaoxiangqing 2006-03-13
  • 打赏
  • 举报
回复
------------A-----------
/*
库存表
产品ID,库存量
1 100
2 100
3 100
4 100
5 100

订单表
产品ID,订货量
1 80
2 100
3 300
4 200
*/
if exists (select * from sysobjects where object_id('库存表')=id and objectproperty(id,'isUserTable')=1)
drop table 库存表

if exists (select * from sysobjects where object_id('订单表')=id and objectproperty(id,'isUserTable')=1)
drop table 订单表
go

create table 库存表(产品ID int,库存量 int)
create table 订单表(产品ID int,订货量 int)
go

---------增加数据---------
insert 库存表
select 1,100 union all
select 2,100 union all
select 3,100 union all
select 4,100 union all
select 5,100

insert 订单表
select 1,80 union all
select 2,100 union all
select 3,300 union all
select 4,200
go

select * from 库存表
/*
产品ID,库存量
1 100
2 100
3 100
4 100
5 100
*/

select * from 订单表
/*
产品ID,订货量
1 80
2 100
3 300
4 200
*/

--方法一(适合订单表产品ID没有重复)
select a.产品ID,订货量-库存量 进货量 from 订单表 a join 库存表 b on a.产品ID=b.产品ID where 库存量-订货量<0
/*
产品ID,进货量
3 200
4 100
*/

--方法二(适合所有情况)
select 产品ID,-sum(库存量) 进货量 from
(
select 产品ID,库存量 from 库存表 union all
select 产品ID,-订货量 from 订单表
)a group by 产品ID having sum(库存量)<0
/*
产品ID,进货量
3 200
4 100
*/
wwwwb 2006-03-13
  • 打赏
  • 举报
回复
SELECT a.id,a.订货量-b.库存量 as 进货量
from b102 a inner join b101 b on a.id=b.id and a.订货量>b.库存量
Redball 2006-03-13
  • 打赏
  • 举报
回复
这个问题我自己解决了,没有用连接,就适用于订单重复的情况,谢谢大家哈~
changechange 2006-03-12
  • 打赏
  • 举报
回复
select 产品ID, sum(a) as 进货量 from (

select 产品ID,库存量*-1 as a from 库存表 union all select 产品ID,订货量 as a from 订单表

) as 中间表 group by 产品ID having sum(a)>0
OracleRoob 2006-03-12
  • 打赏
  • 举报
回复
--少了group by

select 产品ID, sum(a) as 进货量 from (

select 产品ID,库存量*-1 as a from 库存表 union all select 产品ID,订货量 as a from 订单表

) as 中间表
group by 产品id
having sum(a)>0
changechange 2006-03-12
  • 打赏
  • 举报
回复
select 产品ID, sum(a) as 进货量 from (

select 产品ID,库存量*-1 as a from 库存表 union all select 产品ID,订货量 as a from 订单表

) as 中间表 having sum(a)>0


直接用标准 SQL 语句搞定,不用 VBA 函数NZ ,因为对环境要求高了点
OracleRoob 2006-03-12
  • 打赏
  • 举报
回复
select dd.产品id, nz([dd].[订货量],0)-nz([kc].[库存量],0) as 进货量
into t3
from 订单表 as dd inner join 库存表 as kc on dd.产品id = kc.产品id
where nz([dd].[订货量],0)-nz([kc].[库存量],0)>0

7,712

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧