(急求)多表联合查询,解决问题马上结帖谢谢
我有三个表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
[解决办法]
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
[解决办法]
好老的贴
[解决办法]
没到一年.
[解决办法]
BS楼上考古的,,,