两个表a,b
a:
    订单号    客户名称    产品名称    型号    订单数量
    201001002    张三       葡萄       PT      15
    201001002    张三       苹果       PG      13
    201001002    张三       梨子       LZ      10b:
    订单号    客户名称    产品名称    型号    发货数量
    201001002    张三       葡萄       PT      2
    201001002    张三       苹果       PG      3    查询语句select a.客户名称,a.产品名称,a.型号,isnull(a.订单数量,0) as 订单数量,isnull(b.发货数量,0) as 发货数量,(isnull(a.订单数量,0) - isnull(b.发货数量,0)) as 待生产数量 from
     a,
     b
     where (a.产品名称=b.产品名称) and (a.型号=b.驱动器型号)这样可以得出
      客户名称   产品名称   型号   订单数量   发货数量      待生产数量
      张三       葡萄       PT      15            2             13
      张三       苹果       PG      13            3             10但我想得到下面的结果
      客户名称   产品名称   型号   订单数量   发货数量      待生产数量
      张三       葡萄       PT      15            2             13
      张三       苹果       PG      13            3             10
      张三       梨子       LZ      10            0             10如何?

解决方案 »

  1.   

    select * from a
    union all
    select * from b
      

  2.   


    select a.客户名称,a.产品名称,a.型号,isnull(a.订单数量,0) as 订单数量,isnull(b.发货数量,0) as 发货数量,(isnull(a.订单数量,0) - isnull(b.发货数量,0)) as 待生产数量
    from a left outer join b on a.订单号 = b.订单号 and a.型号=b.型号
      

  3.   

    select a.客户名称,a.产品名称,a.型号,isnull(a.订单数量,0) as 订单数量,isnull(b.发货数量,0) as 发货数量,(isnull(a.订单数量,0) - isnull(b.发货数量,0)) as 待生产数量 from
    a left join b
    on
     (a.产品名称=b.产品名称) and (a.型号=b.驱动器型号)
      

  4.   

    结果:张三 葡萄 PT 15 2 13
    张三 苹果 PG 13 3 10
    张三 梨子 LZ 10 0 10
      

  5.   

    SELECT a.客户名称, a.产品名称, a.型号, ISNULL(a.订单数量, 0) AS 订单数量, 
          ISNULL(b.发货数量, 0) AS 发货数量, ISNULL(a.订单数量, 0) - ISNULL(b.发货数量, 0) 
          AS 待生产数量
    FROM b RIGHT OUTER JOIN
          a ON a.产品名称 = b.产品名称 AND a.型号 = b.型号已经经过sql2000查询分析器执行成功!
      

  6.   

    IF EXISTS (SELECT * FROM sysobjects WHERE NAME ='a')
        DROP TABLE [a]
    CREATE TABLE [a]
    (
        [订单号]  bit  NULL ,
        [客户名称]  varchar(100)  NULL ,
        [产品名称]  varchar(100)  NULL ,
        [型号]  varchar(100)  NULL ,
        [订单数量]  int NULL
    )
    GO--插入测试数据
    INSERT INTO [a] ([订单号],[客户名称],[产品名称],[型号],[订单数量])
        SELECT '201001002','张三','葡萄','PT','15' UNION
        SELECT '201001002','张三','苹果','PG','13' UNION
        SELECT '201001002','张三','梨子','LZ','10'
    GOIF EXISTS (SELECT * FROM sysobjects WHERE NAME ='b')
        DROP TABLE [b]
    CREATE TABLE [b]
    (
        [订单号]  bit  NULL ,
        [客户名称]  varchar(100)  NULL ,
        [产品名称]  varchar(100)  NULL ,
        [型号]  varchar(100)  NULL ,
        [发货数量]  int NULL
    )
    GO--插入测试数据
    INSERT INTO [b] ([订单号],[客户名称],[产品名称],[型号],[发货数量])
        SELECT '201001002','张三','葡萄','PT','2' UNION
        SELECT '201001002','张三','苹果','PG','3'
    GO
    select a.客户名称,a.产品名称,a.型号,isnull(a.订单数量,0) as 订单数量,isnull(b.发货数量,0) as 发货数量,(isnull(a.订单数量,0) - isnull(b.发货数量,0)) as 待生产数量 from
    a LEFT  JOIN b ON a.产品名称=b.产品名称 AND a.型号=b.型号/*
    张三
    梨子    LZ    10    0    10    张三
    苹果    PG    13    3    10    张三
    葡萄    PT    15    2    13    
    */
      

  7.   

    --> 测试数据: #a
    if object_id('tempdb.dbo.#a') is not null drop table #a
    create table #a (订单号 int,客户名称 varchar(4),产品名称 varchar(4),型号 varchar(2),订单数量 int)
    insert into #a
    select 201001002,'张三','葡萄','PT',15 union all
    select 201001002,'张三','苹果','PG',13 union all
    select 201001002,'张三','梨子','LZ',10
    --> 测试数据: #b
    if object_id('tempdb.dbo.#b') is not null drop table #b
    create table #b (订单号 int,客户名称 varchar(4),产品名称 varchar(4),型号 varchar(2),发货数量 int)
    insert into #b
    select 201001002,'张三','葡萄','PT',2 union all
    select 201001002,'张三','苹果','PG',3select A.客户名称, A.产品名称, A.型号, A.订单数量, ISNULL(B.发货数量,0),待生产数量=A.订单数量-ISNULL(B.发货数量,0)  from #a A LEFT JOIN #B B ON A.产品名称=B.产品名称
    客户名称 产品名称 型号   订单数量                    待生产数量       
    ---- ---- ---- ----------- ----------- ----------- 
    张三   葡萄   PT   15          2           13
    张三   苹果   PG   13          3           10
    张三   梨子   LZ   10          0           10(所影响的行数为 3 行)
      

  8.   

    IF EXISTS (SELECT * FROM sysobjects WHERE NAME ='a')
        DROP TABLE [a]
    CREATE TABLE [a]
    (
        [订单号]  bit  NULL ,
        [客户名称]  varchar(100)  NULL ,
        [产品名称]  varchar(100)  NULL ,
        [型号]  varchar(100)  NULL ,
        [订单数量]  int NULL
    )
    GO--插入测试数据
    INSERT INTO [a] ([订单号],[客户名称],[产品名称],[型号],[订单数量])
        SELECT '201001002','张三','葡萄','PT','15' UNION
        SELECT '201001002','张三','苹果','PG','13' UNION
        SELECT '201001002','张三','梨子','LZ','10'
    GOIF EXISTS (SELECT * FROM sysobjects WHERE NAME ='b')
        DROP TABLE [b]
    CREATE TABLE [b]
    (
        [订单号]  bit  NULL ,
        [客户名称]  varchar(100)  NULL ,
        [产品名称]  varchar(100)  NULL ,
        [型号]  varchar(100)  NULL ,
        [发货数量]  int NULL
    )
    GO--插入测试数据
    INSERT INTO [b] ([订单号],[客户名称],[产品名称],[型号],[发货数量])
        SELECT '201001002','张三','葡萄','PT','2' UNION
        SELECT '201001002','张三','苹果','PG','3'
    GO
    select a.客户名称,a.产品名称,a.型号,isnull(a.订单数量,0) as 订单数量,isnull(b.发货数量,0) as 发货数量,(isnull(a.订单数量,0) - isnull(b.发货数量,0)) as 待生产数量 from
    a LEFT  JOIN b ON a.产品名称=b.产品名称 AND a.型号=b.型号/*
    张三 梨子    LZ    10    0    10    
    张三 苹果    PG    13    3    10    
    张三 葡萄    PT    15    2    13                                                                                                   葡萄                                                                                                   PT                                                                                                   15          2           13
    */