你好,有个三个表,1.物料数量表,2.物料对应供应商分配表,3.物料对应供应商表。
表结构如下:
1表:物料编号   数量
2表:物料编号   供应商编号  分配额
3表:物料编号   供应商编号
先按物料对应供应商分配表,如果在物料对应供应商分配表中找不到对应的供应商,然后在物料对应供应商表找供应商,不知这样的sql语句如何写?谢谢!

解决方案 »

  1.   

    IF NOT EXISTS (SELECT 供应商编号 FROM 表2 WHERE 物料编号=@ID)
    SELECT 供应商编号 FROM  表3 WHERE 物料编号=@ID
      

  2.   

    select 
      a.物料编号,
      a.数量,
      b.供应商编号,
      b.表别
    from 
      表1 a
    left join 
      (select 物料编号,供应商编号,2 as 表别 from 表2 
       union 
       select 物料编号,供应商编号,3 from 表3) b
    on a.物料编号 = b.物料编号
      

  3.   

    IF NOT EXISTS (SELECT 供应商编号 FROM 表2 WHERE 物料编号=@ID)
    begin
    SELECT 供应商编号 FROM 表3 WHERE 物料编号=@ID
    end
      

  4.   

    看看什么结果select a.物料编号,a.数量,isnull(b.供应商编号 , c.供应商编号) 供应商编号,b.分配额
    from 物料数量表 
    left join 物料对应供应商分配表 b on a.物料编号=b.物料编号
    left join 物料对应供应商表 c on a.物料编号=c.物料编号
      

  5.   

    Quote=引用楼主 yafun 的回复:]
    你好,有个三个表,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.分配额)
      

  6.   

    想要得到如下结果:
    原始数据
    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表中找出供应商编号。
    谢谢!
      

  7.   

    --------------------SQL Server数据格式化工具-------------------
    ---------------------------------------------------------------
    -- 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 行受影响)
    */
      

  8.   

    按照程序处理事件的一般规律,
    分成三步走.
    第一步,将已经有供应商的和未有供应商的数据统统插入到结果表中.
    第二步,提示结果中有供应商为空的条目,并从存货对照表中取出供应商.
    第三步,在前台显示结果.
    所以不要用一个SQL语句去实现,这是我对ERP,MRP软件开发的建议,你自己考虑一下吧.