各位帮帮忙,急,求一个sql语句~~~~~~~~~~~~!

lawrence191 2005-09-19 09:10:36
现在有三个表 出库单、入库单、明细帐。

入库单字段:
材料编号 数量 单价 金额 入库日期

出库单字段:
材料编号 数量 单价 金额 出库日期

明细帐字段:(相当于存货量)
材料编号 数量 单价 金额

要得到的结果是:按‘日期,材料编号’得到纪录。纪录包括入库单的数量、单价、金额,出库单的数量、单价、金额,明细帐的 数量,单价、金额。

eg:
入库单
材料编号 数量 单价 金额 入库日期
0001 15 10 150 2005-9-19
0001 20 11 220 2005-9-17
0002 10 10 100 2005-9-19

出库单
材料编号 数量 单价 金额 出库日期
0001 10 12.5 125 2005-9-19
0006 10 13 130 2005-9-19

得到的结果:
日期 材料编号 入库数量 入库单价 入库金额 出库数量 出库单价 出库金额 明细量
2005-9-17 0001 20 11 220 0或者空白 0或者空白 0或者空白 存货数
2005-9-19 0001 15 10 150 10 12.5 125 同上
2005-9-19 0002 10 10 100 0或者空白 0或者空白 0或者空白 同上
2005-9-19 0006 0或者空白 0或者空白 0或者空白 10 13 130 同上

各位,能看明白吗?就是按日期和材料编号来产生纪录,如果出库单中和入库单中都有相应纪录,就都填写。出库单或者入库单中有一个没有相应纪录,就只填写有的。就是这个表,有出库或者入库就要填写。没有的话就不用填写了。


...全文
122 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lawrence191 2005-09-20
  • 打赏
  • 举报
回复
兄弟 连接表查出来的不是我要的结果,而是在两个表中都存在的纪录。
子陌红尘 2005-09-20
  • 打赏
  • 举报
回复
--生成测试数据
create table 入库单(材料编号 varchar(10),数量 int,单价 money,金额 money,入库日期 datetime)
insert into 入库单 select '0001',15,10,150,'2005-9-19'
insert into 入库单 select '0001',20,11,220,'2005-9-17'
insert into 入库单 select '0002',10,10,100,'2005-9-19'
create table 出库单(材料编号 varchar(10),数量 int,单价 money,金额 money,出库日期 datetime)
insert into 出库单 select '0001',10,12.5,125,'2005-9-19'
insert into 出库单 select '0006',10,13 ,130,'2005-9-19'


--执行查询
select
日期 = isnull(a.入库日期,b.出库日期),
材料编号 = isnull(a.材料编号,b.材料编号),
入库数量 = isnull(a.数量,0),
入库单价 = isnull(a.单价,0),
入库金额 = isnull(a.金额,0),
出库数量 = isnull(b.数量,0),
出库单价 = isnull(b.单价,0),
出库金额 = isnull(b.金额,0),
明细量 = (select
isnull(sum(数量),0)
from
入库单
where
入库日期<=isnull(a.入库日期,b.出库日期)
and
材料编号 = isnull(a.材料编号,b.材料编号))
-
(select
isnull(sum(数量),0)
from
出库单
where
出库日期<=isnull(a.入库日期,b.出库日期)
and
材料编号 = isnull(a.材料编号,b.材料编号))
from
入库单 a
full outer join
出库单 b
on
a.材料编号 = b.材料编号 and a.入库日期 = b.出库日期
order by
isnull(a.入库日期,b.出库日期),isnull(a.材料编号,b.材料编号)


--输出结果
/*
日期 材料编号 入库数量 入库单价 入库金额 出库数量 出库单价 出库金额 明细量
---------- -------- -------- -------- -------- -------- -------- -------- ------
2005-09-17 0001 20 11 220 0 0 0 20
2005-09-19 0001 15 10 150 10 12.5 125 25
2005-09-19 0002 10 10 100 0 0 0 10
2005-09-19 0006 0 0 0 10 13 130 -10
*/


--删除测试数据
drop table 入库单,出库单
子陌红尘 2005-09-20
  • 打赏
  • 举报
回复
try:
------------------------------------------------------------------------
select
入库日期 = isnull(a.入库日期,b.入库日期),
材料编号 = isnull(a.材料编号,b.材料编号),
入库数量 = isnull(a.数量,0),
入库单价 = isnull(a.单价,0),
入库金额 = isnull(a.金额,0),
出库数量 = isnull(b.数量,0),
出库单价 = isnull(b.单价,0),
出库金额 = isnull(b.金额,0),
明细量 = (select count(数量) from 入库单 where 入库日期<=isnull(a.入库日期,b.入库日期) and 材料编号 = isnull(a.材料编号,b.材料编号))
- (select count(数量) from 出库单 where 入库日期<=isnull(a.入库日期,b.入库日期) and 材料编号 = isnull(a.材料编号,b.材料编号))
from
入库单 a
full outer join
出库单 b
on
a.材料编号 = b.材料编号 and a.入库日期 = b.入库日期
order by
isnull(a.入库日期,b.入库日期),isnull(a.材料编号,b.材料编号)
feitianbianfu16 2005-09-20
  • 打赏
  • 举报
回复
create table input (ino varchar(10),icount int, iprice int,icost int, intime datetime)
go
create table outp (ono varchar(10),ocount int, oprice int,ocost int, ontime datetime)
go
insert input select '0001', 15,10,150,'2005-9-19'
union all select '0001',20, 11 , 220 ,'2005-9-17'
union all select '0002', 10 , 10 , 100 , '2005-9-19'
go
insert outp select '0001', 10 ,12.5, 125 ,'2005-9-19'
union all select '0006', 10,13,130,'2005-9-19'
go
select isnull(intime,ontime) 日期,isnull(ino,ono) 材料编号,isnull(icount,0) 入库数量,isnull(iprice,0) 入库单价,isnull(icost,0) 入库金额,
isnull(ocount,0) 出库数量,isnull(oprice,0) 出库单价,isnull(icost,0) 出库金额 from input full join outp on ino=ono and intime=ontime order by 日期,材料编号


日期 材料编号 入库数量 入库单价 入库金额 出库数量 出库单价 出库金额
-------------------------- ---------- ----------- ----------- ----------- ----------- ----------- -----------
2005-09-17 00:00:00.000 0001 20 11 220 0 0 220
2005-09-19 00:00:00.000 0001 15 10 150 10 12 150
2005-09-19 00:00:00.000 0002 10 10 100 0 0 100
2005-09-19 00:00:00.000 0006 0 0 0 10 13 0

(所影响的行数为 4 行)
由于不知道你的“明细量”指的是什么,所以没有写出来!
gaojie001 2005-09-20
  • 打赏
  • 举报
回复
aa
lisiyong 2005-09-19
  • 打赏
  • 举报
回复
个人建议: 表名和字段名用英文 可能在程序设计 的时候少点麻烦...
lisiyong 2005-09-19
  • 打赏
  • 举报
回复
好象只要连接表查询就可以:

select 入库单.数量,入库单.单价,入库单.金额,出库单.数量,出库单.单价,出库单.金额,
明细帐.数量,明细帐.单价,明细帐.金额

from 出库单,入库单,明细帐

where 出库单.材料编号=入库单.材料编号 and 明细帐.材料编号=入库单.材料编号
lawrence191 2005-09-19
  • 打赏
  • 举报
回复
顶。。。各位高手帮帮忙
lawrence191 2005-09-19
  • 打赏
  • 举报
回复
现在有三个表 出库单、入库单、明细帐。

入库单字段:
材料编号 数量 单价 金额 入库日期

出库单字段:
材料编号 数量 单价 金额 出库日期

明细帐字段:(相当于存货量)
材料编号 数量 单价 金额

要得到的结果是:按‘日期,材料编号’得到纪录。纪录包括入库单的数量、单价、金额,出库单的数量、单价、金额,明细帐的 数量,单价、金额。

eg:
入库单
材料编号 数量 单价 金额 入库日期
0001 15 10 150 2005-9-19
0001 20 11 220 2005-9-17
0002 10 10 100 2005-9-19

出库单
材料编号 数量 单价 金额 出库日期
0001 10 12.5 125 2005-9-19
0006 10 13 130 2005-9-19

得到的结果:
日期 材料编号 入库数量 入库单价 入库金额 出库数量 出库单价 出库金额 明细量
2005-9-17 0001 20 11 220 0或者空白 0或者空白 0或者空白 存货数
2005-9-19 0001 15 10 150 10 12.5 125 同上
2005-9-19 0002 10 10 100 0或者空白 0或者空白 0或者空白 同上
2005-9-19 0006 0或者空白 0或者空白 0或者空白 10 13 130 同上

各位,能看明白吗?就是按日期和材料编号来产生纪录,如果出库单中和入库单中都有相应纪录,就都填写。出库单或者入库单中有一个没有相应纪录,就只填写有的。就是这个表,有出库或者入库就要填写。没有的话就不用填写了。






34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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