订单表
订单号      产品名称    订单数量      单位
131110       AA        100        华能
配送表
订单号     产品名称     配送数量     出货仓库     单位
131110      AA         100        A          华能
出库表
订单号      产品名称     出库数量     出货仓库     
131110       AA         30         A
131110       AA         40         B
131110       AA         20         C   
要求结果
订单号      产品名称  订单数量 配送数量 出库数量 单位 出货仓库    未出库数量
131110     AA 100 100 30 华能 A           10
131110     AA 100 100 40 华能 B           10
131110     AA 100 100 20  华能 C           10

解决方案 »

  1.   


    select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
    b.配送数量-c.出库数量 as 未出库数量
    from 订单表 a
    left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
    left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称
      

  2.   

    ;with 订单表(订单号,产品名称,订单数量,单位) as
    (
    select 131110,'AA',100,'华能'
    ),
    配送表(订单号,产品名称,配送数量,出货仓库,单位) as
    (
    select 131110,'AA',100,'A','华能'
    ),
    出库表(订单号,产品名称,出库数量,出货仓库 ) as
    (
    select 131110,'AA',30,'A'
    union all select 131110,'AA',40,'B'
    union all select 131110,'AA',20,'C'
    )
    select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
    b.配送数量-c.出库数量 as 未出库数量
    from 订单表 a
    left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
    left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称/*
    订单号 产品名称 订单数量 配送数量 出库数量 单位 出货仓库 未出库数量
    --------------------------------------------------------------------------------------
    131110 AA 100 100 30 华能 A 70
    131110 AA 100 100 40 华能 B 60
    131110 AA 100 100 20 华能 C 80
    */
      

  3.   

    CREATE TABLE #订单表
    (
    [订单号] VARCHAR(10)
    ,[产品名称] CHAR(2)
    ,[订单数量] INT
    ,[单位] NVARCHAR(20)
    )
    INSERT INTO #订单表
    VALUES('131110',    'AA',        100,        N'华能')
    CREATE TABLE #配送表
    (
    [订单号] VARCHAR(10)
    ,[产品名称] CHAR(2)
    ,[配送数量] INT
    ,[出货仓库] CHAR(1)
    ,[单位] NVARCHAR(20)
    )
    INSERT INTO #配送表
    VALUES('131110',    'AA',        100, 'A',        N'华能')
    CREATE TABLE #出库表
    (
    [订单号] VARCHAR(10)
    ,[产品名称] CHAR(2)
    ,[出库数量] INT
    ,[出货仓库] CHAR(1)
    )
    INSERT INTO #出库表
    SELECT '131110',    'AA',30,'A'UNION ALL
    SEleCT '131110',    'AA',40,'B'UNION ALL
    SEleCT '131110',    'AA',20,'c'SELECT A.订单号
    ,A.产品名称
    ,A.订单数量
    ,B.配送数量
    ,C.出库数量
    ,A.单位
    ,C.出货仓库
    ,A.订单数量
    -(SELECT SUM(出库数量) 
    FROM #出库表 AS D 
    WHERE D.订单号=A.订单号 ) AS [未出库数量]
    FROM #订单表 AS A
    JOIN #配送表 AS B ON A.订单号=B.订单号
    JOIN #出库表 AS C ON A.订单号=C.订单号DROP TABLE #订单表
    DROP TABLE #配送表
    DROP TABLE #出库表
      

  4.   

    方法1,适合sql server 2000:
    ;with 订单表(订单号,产品名称,订单数量,单位) as
    (
    select 131110,'AA',100,'华能'
    ),
    配送表(订单号,产品名称,配送数量,出货仓库,单位) as
    (
    select 131110,'AA',100,'A','华能'
    ),
    出库表(订单号,产品名称,出库数量,出货仓库 ) as
    (
    select 131110,'AA',30,'A'
    union all select 131110,'AA',40,'B'
    union all select 131110,'AA',20,'C'
    )select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
    b.配送数量-(select sum(d.出库数量) 
               from 出库表 d 
               where d.订单号 = a.订单号 and 
                     d.产品名称 = a.产品名称) as 未出库数量
    from 订单表 a
    left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
    left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称/*
    订单号 产品名称 订单数量 配送数量 出库数量 单位 出货仓库 未出库数量
    131110 AA     100     100     30     华能 A     10
    131110 AA     100     100     40      华能 B     10
    131110 AA     100     100     20     华能 C     10
    */方法2,适合sql server 2005:select a.订单号,a.产品名称,a.订单数量,b.配送数量,c.出库数量,a.单位,c.出货仓库,
    b.配送数量-(sum(c.出库数量) over(partition by a.订单号,a.产品名称)) as 未出库数量
    from 订单表 a
    left join 配送表 b on a.订单号=b.订单号 and a.产品名称=b.产品名称
    left join 出库表 c on a.订单号=c.订单号 and a.产品名称=c.产品名称/*
    订单号 产品名称 订单数量 配送数量 出库数量 单位 出货仓库 未出库数量
    131110 AA     100     100     30     华能 A     10
    131110 AA     100     100     40      华能 B     10
    131110 AA     100     100     20     华能 C     10
    */
      

  5.   

    select a.*,b.配送数量,c.出库数量,b.出货仓库,(配送数量-出库数量) as 未出库数量 
    from 订单表 a 
    left join 配送表 b
    on a.订单号 = b.订单号
    left join 出库表 c
    on a.订单号=c.订单号
      

  6.   

    用二楼的试试,二楼的代码可以运行得到你想要的结果,而且也挺简便的。带对于server 2000的话,with cte查询就没作用了。