(急求)多表联合查询,解决问题马上结帖谢谢

SoftwKLC 2007-04-21 04:53:53
我有三个表orderinfo、表InputMateriel、表OutputMateriel、表StockPileInfo
-----------InputMateriel表结构如下:---------------------订料表
类型 供应商名 订料单号 订料名称 数量 要求到料时间 实际到料时间
ordtype proname ordmcode orddsMname ordNumber ordSqdata ordsjdata
-----------InputMateriel表结构如下:---------------------来料表
类型 来料时间 来料单号 料名,供应商,来料数
Ipttype mdata Iptmcode mname pname Iptmnum
-----------OutputMateriel表结构如下:--------------------发料表
类型 来料时间 来料单号 料名,供应商,来料数
Opttype mdata Optmcode mname pname Optmnum
-----------StockPileInfo表结构如下:---------------------库存表
类型 料名 库存数
Stotype mname Stomnum 进料之前此表是空表
-------------------------------------------------------
原始数据
-------------------------------------------------------------------------
select * from OrderInfo
结果:类型 供应商名 订料单号 订料名称 数量 要求到料时间 实际到料时间
1001 一厂 A-1001 电源 200 2007-04-10 2007-04-12
1002 二厂 B-1001 电容 100 2007-04-12 2007-04-12
select * from InputMateriel
结果:类型 料名 供应商 来料单号 来料时间 来料数
1001 电源 一厂 AL-1001 2007-04-12 200
1001 电容 二厂 BL-1001 2007-04-15 100
select * from OutputMateriel
结果:类型 料名 供应商 发料单号 发料时间  发料数
1001 电源 一厂 AF-1001 2007-04-13 100
1001 电源 一厂 AF-1002 2007-04-15 30
1001 电源 一厂 AF-1003 2007-04-16 20
select * from StockPileInfo (此表实时更新,来一批料现库存+来料数,发一批料现库存-发料数)
结果:类型 料名 现库存
1001 电源 50
1002 电容 100
-------------------------------------------------------------------------
注释:1、(来料时间=实际到料时间)2、(现在库存=来料数-发料数)
我的四个查询语句
-------------------------------------------------------------------------
1、
select * from orderinfo where ordtype='1001' and orddsMname='电源' and ordsjdata between '2007-04-10' and '2007-04-20'
结果:类型 供应商名 订料单号 订料名称 数量 要求到料时间 实际到料时间
1001 一厂 A-1001 电源 200 2007-04-10 2007-04-12
2、
select * from InputMateriel where Ipttype='1001'and mname='电源'and Mdata between '2007-04-10' and '2007-04-20'
结果:类型 料名 供应商 来料单号 来料时间 来料数
1001 电源 一厂 AL-1001 2007-04-12 200
3、
select * from OutputMateriel where Opttype='1001'and mname='电源'and Mdata between '2007-04-10' and '2007-04-20'
结果:类型 料名 供应商 发料单号 发料时间  发料数
1001 电源 一厂 AF-1001 2007-04-13 100
1001 电源 一厂 AF-1002 2007-04-15 30
1001 电源 一厂 AF-1003 2007-04-16 20
4、
select * from StockPileInfo
结果:类型 料名 现库存
1001 电源 50
1002 电容 100
------------------------------------------------------------------------
怎么按(类型、料名、Mdata)结合三个表查询得到如下结果:按时间排序
订料单号 料名 来料单号 来料时间 来料数量 发料单号 发料时间 发料数量 库存
A-1001 电源 AL-1001 2007-04-12 200 200
A-1001 电源 AF-1001 2007-04-13 100 100
A-1001 电源 AF-1002 2007-04-15 30 70
A-1001 电源 AF-1003 2007-04-16 20 50


...全文
313 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
conan304 2008-01-22
  • 打赏
  • 举报
回复
很好,很强大
dobear_0922 2008-01-22
  • 打赏
  • 举报
回复
再次BS!
dobear_0922 2008-01-22
  • 打赏
  • 举报
回复
BS楼上考古的,,,
dawugui 2008-01-22
  • 打赏
  • 举报
回复
楼主好象出现过.
dawugui 2008-01-22
  • 打赏
  • 举报
回复
没到一年.
昵称被占用了 2008-01-22
  • 打赏
  • 举报
回复
好老的贴
TNT_1st_excellence 2008-01-18
  • 打赏
  • 举报
回复
SQL 如下:

SELECT
A.ordmcode as '定料单号' ,A.orddsMname as '料名',
B.Iptmcode as '来料单号' ,CONVERT(NVARCHAR(50),A.ordsjdata, 120) as '来料时间' ,
CONVERT(NVARCHAR(50),B.Iptmnum) as '来料数量' , '' as '发料单号' ,
'' as '发料时间' , '' as '发料数量', B.Iptmnum AS '库存'
FROM orderinfo AS A
INNER JOIN InputMateriel AS B ON A.ordtype = B.Ipttype and A.orddsMname = B.mname
UNION
SELECT
restuleTB.ordmcode as '定料单号',restuleTB.orddsMname as '料名',
'' as '来料单号' , '' as '来料时间' ,
'' as '来料数量' ,restuleTB.Optmcode as '发料单号' ,
CONVERT(NVARCHAR(50),restuleTB.mdata, 120) as '发料时间' ,
CONVERT(NVARCHAR(50),restuleTB.Optmnum) as '发料数量',
(CASE WHEN ROW =1 THEN restuleTB.Iptmnum - restuleTB.Optmnum
ELSE
(restuleTB.Iptmnum - restuleTB.Optmnum -
(SELECT SUM(A.Optmnum)
FROM
(SELECT
ROW_NUMBER() OVER(ORDER BY C.mdata) AS ROW,
(C.Optmnum)
FROM orderinfo AS A
INNER JOIN InputMateriel AS B ON A.ordtype = B.Ipttype and A.orddsMname = B.mname
INNER JOIN OutputMateriel AS C ON A.ordtype = C.Opttype and A.orddsMname = C.mname
)AS A WHERE A.ROW <= restuleTB.ROW -1
)
)END) AS '库存' --现在库存=来料数-发料数
FROM
(SELECT
ROW_NUMBER() OVER(ORDER BY C.mdata ASC) AS ROW,
A.ordmcode, A.orddsMname, C.Optmcode,
C.mdata, B.Iptmnum, C.Optmnum
FROM orderinfo AS A
INNER JOIN InputMateriel AS B ON A.ordtype = B.Ipttype and A.orddsMname = B.mname
INNER JOIN OutputMateriel AS C ON A.ordtype = C.Opttype and A.orddsMname = C.mname
) AS restuleTB
ORDER BY '来料时间' DESC

34,590

社区成员

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

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