首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请教一条数据库查询该如何写,多表的有点不熟。多谢了

2012-04-23 
请问一条数据库查询该怎么写,多表的有点不熟。谢谢了。表 进库IDint,num int表出库IDint,进库ID,num int表进

请问一条数据库查询该怎么写,多表的有点不熟。谢谢了。
表 进库 ID int,num int
表出库 ID int,进库ID,num int

表进库数据例如 1,500 2,500
表出库数据例如 1,1,300 1,1,200 1,2,300

此时的意思就是表a进库了500箱,1、2产品,卖掉了500箱1,300箱2,那么此时查询出来的数据即为库存中还剩下的b为200.

此时数据为 进库ID int,剩下的num

描述的不好,抱歉,在线刷新谢谢了。

[解决办法]
/*
表 进库 ID int,num int
表出库 ID int,进库ID,num int

表进库数据例如 1,500 2,500
表出库数据例如 1,1,300 1,1,200 1,2,300

此时的意思就是表a进库了500箱,1、2产品,
卖掉了500箱1,300箱2,那么此时查询出来的数据即为库存中还剩下的b为200.

此时数据为 进库ID int,剩下的num

描述的不好,抱歉,在线刷新谢谢了。
*/

go
if OBJECT_ID('A')is not null
if OBJECT_ID('B')is not null
drop table A
drop table B
go
create table A(
ID int,
num int
)
go
insert A
select 1,500 union all
select 2,500
go
create table B(
ID int,
SaledId int,
num int
)
go
insert B
select 1,1,300 union all
select 1,1,200 union all
select 1,2,300

;with T
as
(
select ID,SaledId,SUM(num) as num from B
group by ID,SaledId
)

select T.ID,T.SaledId,A.num-T.num as num from T
inner join A on A.ID=T.SaledId

/*
IDSaledIdnum
110
12200
*/

是这个意思么
[解决办法]

SQL code
/*建表,插入测试数据*/create table a(    Id integer primary key not null,    Num integer);insert into a (Id, Num) values (1, 500);insert into a (Id, Num) values (2, 500);create table b(    Id integer primary key not null,    aId integer,    Num integer,    foreign key(aId) references a(Id));insert into b (Id, aId, Num) values (1, 1, 300);insert into b (Id, aId, Num) values (2, 1, 200);  /*这里楼主写的依然是1,我理解为楼主写错了,按照表_出库的规则,应该这个Id为2*/insert into b (Id, aId, Num) values (3, 2, 300);  /*同上*//*查询语句*/select a.Id as Id, (a.Num - sum(b.Num)) as Num from a join b on a.Id = b.aId group by a.Id, a.Num/*结果Id     Num1      02      200    */
[解决办法]
我明白你的意思了就是两个表相减得出库存数据,你这样设计不太合理,应该再建一个库存表
进库时,库存表增加,出库时,库存表就减少。这样就好办了。你这样当然也能联合查询得到,就是不太合理

这样,以应对多次入库
select a.Id as Id, (sum(a.Num) - sum(b.Num)) as Num from a join b on a.Id = b.aId group by a.Id, a.Num

热点排行