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

SoftwKLC 2007-04-23 08:59:45
我有三个表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
...全文
222 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gahade 2007-04-23
  • 打赏
  • 举报
回复
drop table orderinfo,InputMateriel,OutputMateriel,StockPileInfo
go
create table orderinfo(ordtype varchar(10),proname varchar(100),ordmcode varchar(20),orddsmname varchar(255),ordNumber numeric(20,6),ordSqdata datetime,ordsjdata datetime)
create table InputMateriel(ipttype varchar(10),mdata datetime,iptmcode varchar(20),mname varchar(255),pname varchar(100),Iptmnum numeric(20,6))
create table OutputMateriel(opttype varchar(10),mdata datetime,optmcode varchar(20),mname varchar(255),pname varchar(100),optmnum numeric(20,6))
create table StockPileInfo(stotype varchar(10),mname varchar(255),Stomnum numeric(20,6))

insert into OrderInfo
select '1001','一厂','A-1001','电源',200,'2007-04-10','2007-04-12'
union all select '1002','二厂','B-1001','电容',100,'2007-04-12','2007-04-12'

insert into InputMateriel(ipttype,mname,pname,iptmcode,mdata,iptmnum)
select '1001','电源','一厂','AL-1001','2007-04-12',200
union all select '1002','电容','二厂','BL-1001','2007-04-15',100

insert into OutputMateriel(opttype,mname,pname,optmcode,mdata,optmnum)
select '1001','电源','一厂','AF-1001','2007-04-13',100
union all select '1001','电源','一厂','AF-1002','2007-04-15',30
union all select '1001','电源','一厂','AF-1003','2007-04-16',20
union all select '1002','电容','二厂','AF-1004','2007-04-20',10
union all select '1002','电容','二厂','AF-1005','2007-04-21',50

insert into StockPileInfo
select '1001','电源',50
union all select '1002','电容',40

select * from (
select b.ordmcode as '订料单号',
a.mname as '料名',
a.iptmcode as '来料单号',
convert(char(10),a.mdata,120) as '来料时间',
a.iptmnum as '来料数量',
NULL as '发料单号',
NULL as '发料时间',
NULL as '发料数量',
a.iptmnum as '库存'
from InputMateriel a
inner join orderinfo b on a.ipttype=b.ordtype and a.mname=b.orddsmname
union all
select b.ordmcode,
c.mname,
NULL,
NULL,
NULL,
c.optmcode,
convert(char(10),c.mdata,120),
c.optmnum,
isnull((select sum(isnull(optmnum,0))+x.Stomnum from OutputMateriel y where y.opttype=c.opttype and y.mname=c.mname and c.mdata<y.mdata),x.Stomnum)
from OutputMateriel c
inner join orderinfo b on c.opttype=b.ordtype and c.mname=b.orddsmname
inner join StockPileInfo x on x.stotype=c.opttype and x.mname=c.mname)t
order by 订料单号,料名,来料单号 desc

/*
订料单号 料名 来料单号 来料时间 来料数量 发料单号 发料时间 发料数量 库存
--------------------------------------------------------------------------------------------
A-1001 电源 AL-1001 2007-04-12 200.000000 NULL NULL NULL 200.000000
A-1001 电源 NULL NULL NULL AF-1001 2007-04-13 100.000000 100.000000
A-1001 电源 NULL NULL NULL AF-1002 2007-04-15 30.000000 70.000000
A-1001 电源 NULL NULL NULL AF-1003 2007-04-16 20.000000 50.000000
B-1001 电容 BL-1001 2007-04-15 100.000000 NULL NULL NULL 100.000000
B-1001 电容 NULL NULL NULL AF-1004 2007-04-20 10.000000 90.000000
B-1001 电容 NULL NULL NULL AF-1005 2007-04-21 50.000000 40.000000
*/
HelloWorld_001 2007-04-23
  • 打赏
  • 举报
回复
1:你的StockPileInfo表是不是直接偶数据,不需要自己计算?
2:你的表结构有了,但是看不出来表之间怎么关联?
内容概要:本文档是2025年全国广播电视技术能手竞赛IPTV专业的竞赛内容大纲,旨在指导参赛选手准备比赛。竞赛分为理论和实操两大部分。理论部分涵盖基本知识、基础理论和专业知识,包括法律法规、技术标准、IPTV技术基础、信号传输与分发、网络和数据安全等。实操部分则涉及IPTV系统设备、仪器设备的操作使用和指标测量。具体内容包括IPTV系统架构、传输技术与指标、设备配置及维护、专业技能如测量工具使用、视音频指标测量、直播点播协议分析、播出网络性能测量、网络安全数据分析以及系统故障排查等。 适合人群:从事或有意从事IPTV相关工作的技术人员,尤其是有志于参加全国广播电视技术能手竞赛的专业人士。 使用场景及目标:①帮助参赛选手全面了解并掌握IPTV相关的法规文件和技术标准;②提升选手对IPTV系统架构、传输技术和设备配置的理解;③增强选手在实际操作中的测量、分析和故障排查能力;④确保选手能够熟练运用各种测量工具和分析软件进行视音频指标测量和网络安全数据分析。 阅读建议:由于文档内容详尽且专业性强,建议读者在学习过程中结合实际案例和操作练习,同时参考相关技术文献,以便更好地理解和掌握竞赛所需的知识和技能。

34,838

社区成员

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

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