你好,有个三个表,1.物料数量表,2.物料对应供应商分配表,3.物料对应供应商表。
表结构如下:
1表:物料编号 数量
2表:物料编号 供应商编号 分配额
3表:物料编号 供应商编号
先按物料对应供应商分配表,如果在物料对应供应商分配表中找不到对应的供应商,然后在物料对应供应商表找供应商,不知这样的sql语句如何写?谢谢!
表结构如下:
1表:物料编号 数量
2表:物料编号 供应商编号 分配额
3表:物料编号 供应商编号
先按物料对应供应商分配表,如果在物料对应供应商分配表中找不到对应的供应商,然后在物料对应供应商表找供应商,不知这样的sql语句如何写?谢谢!
SELECT 供应商编号 FROM 表3 WHERE 物料编号=@ID
a.物料编号,
a.数量,
b.供应商编号,
b.表别
from
表1 a
left join
(select 物料编号,供应商编号,2 as 表别 from 表2
union
select 物料编号,供应商编号,3 from 表3) b
on a.物料编号 = b.物料编号
begin
SELECT 供应商编号 FROM 表3 WHERE 物料编号=@ID
end
from 物料数量表
left join 物料对应供应商分配表 b on a.物料编号=b.物料编号
left join 物料对应供应商表 c on a.物料编号=c.物料编号
你好,有个三个表,1.物料数量表,2.物料对应供应商分配表,3.物料对应供应商表。
表结构如下:
1表:物料编号 数量
2表:物料编号 供应商编号 分配额
3表:物料编号 供应商编号
先按物料对应供应商分配表,如果在物料对应供应商分配表中找不到对应的供应商,然后在物料对应供应商表找供应商,不知这样的sql语句如何写?谢谢!
[/Quote]
--不知道是不是这个意思
select a.物料编号,isnull(a.供应商编号,c.供应商编号),sum(b.数量) 数量,sum(a.分配额) 分配额
from 物料对应供应商分配表 a join 物料数量表 b on a.物料编号=b.物料编号
right 物料对应供应商表 c on a.物料编号=c.物料编号 and a.供应商编号=c.供应商编号
group by a.物料编号,c.供应商编号
order by sum(b.数量),sum(a.分配额)
原始数据
1表:
物料编号 数量
1001 100
1003 200
1004 300
2表:
物料编号 供应商编号 分配额
1001 A 100%
1003 A 30%
1003 B 30%
1003 C 40%
1004在2表中没有需要在3表中找出供应商编号
3表:
物料编号 供应商编号
1001 D
1003 E
1004 F
虽然1001和1003料号在3表中存在,但是优先用2表中的,不考虑3表中,但是1004需要在3表中找出供应商编号。
谢谢!
---------------------------------------------------------------
-- DESIGNER :happycell188(喜喜)
-- QQ :584738179
-- Development Tool :Microsoft Visual C++ 6.0 C Language
-- FUNCTION :CONVERT DATA TO T-SQL
---------------------------------------------------------------
-- Microsoft SQL Server 2005
-- Developer Edition on Microsoft Windows XP [版本 5.1.2600]
---------------------------------------------------------------
---------------------------------------------------------------use test
go
if object_id('test.dbo.tb1') is not null drop table tb1
-- 创建数据表
create table tb1
(
物料编号 int,
数量 int
)
go
--插入测试数据
insert into tb1 select 1001,100
union all select 1003,200
union all select 1004,300
go
if object_id('test.dbo.tb2') is not null drop table tb2
-- 创建数据表
create table tb2
(
物料编号 int,
供应商编号 char(2),
分配额 char(5)
)
go
--插入测试数据
insert into tb2 select 1001,'A','100%'
union all select 1003,'A','30%'
union all select 1003,'B','30%'
union all select 1003,'C','40%'
go
if object_id('test.dbo.tb3') is not null drop table tb3
-- 创建数据表
create table tb3
(
物料编号 int,
供应商编号 char(2)
)
go
--插入测试数据
insert into tb3 select 1001,'D'
union all select 1003,'E'
union all select 1004,'F'
go
--代码实现select 物料编号,供应商编号 from tb2
union select 物料编号,供应商编号
from tb3 where 物料编号 not in (
select 物料编号 from tb2)/*测试结果物料编号 供应商编号
---------------------
1001 A
1003 A
1003 B
1003 C
1004 F (5 行受影响)
*/
分成三步走.
第一步,将已经有供应商的和未有供应商的数据统统插入到结果表中.
第二步,提示结果中有供应商为空的条目,并从存货对照表中取出供应商.
第三步,在前台显示结果.
所以不要用一个SQL语句去实现,这是我对ERP,MRP软件开发的建议,你自己考虑一下吧.