现有两个表,结构如下
表一
       票号     总数量
       ph       zsl
       001      100
       002      200
       003      200
其中ph是主键,记录唯一
表二
       票号     发货量
       ph       fhs
       001      50
       001      10
       002      200求一SQL语句要查询出如下结果
表三
         票号     总数量   发货数   剩余数
         ph        zsl      fhs      sys
         001       100      60       40
         002       100      10       90
         003       200      0        200 

解决方案 »

  1.   


    select a.ph ,a.zsl,b.fhs, a.zsl-isnull(b.fhs,0) sys
    from 表一 a left join (select ph,sum(fhs) fhs from 表二 group by ph ) b
    on a.ph=b.ph
      

  2.   

    你给的测试数据中的结果好像有误,看我的代码,完全按你的数据建立的数据表:
    --生成测试数据
    IF OBJECT_ID('t1') IS NOT NULL
    DROP TABLE t1
    GO
    CREATE table t1(ph NVARCHAR(3), zsl INT)
    INSERT INTO t1
    SELECT  '001', 100 UNION ALL
    SELECT  '002', 200 UNION ALL
    SELECT  '003', 200IF OBJECT_ID('t2') IS NOT NULL
    DROP TABLE t2
    GO
    CREATE table t2(ph NVARCHAR(3), fhs INT)
    INSERT INTO t2
    SELECT  '001', 50 UNION ALL
    SELECT  '001', 10 UNION ALL
    SELECT  '002', 200--你要的代码
    SELECT a.ph,zsl,isnull(sum(fhs),0) fhs,isnull(zsl-sum(fhs),0) AS sys FROM t1 a left JOIN t2 b ON a.ph=b.ph GROUP BY a.ph,zsl
      

  3.   

    我能错了
    表三应该是
      票号 总数量 发货数 剩余数
      ph  zsl    fhs   sys
      001 100    60    40
      002 200    200    0
      003 200    0     200  
    这个语句就行了
    select a.ph ,a.zsl,isnull(b.fhs,0), a.zsl-isnull(b.fhs,0) sys
    from  a left join (select ph,sum(fhs) fhs from a1 group by ph ) b
    on a.ph=b.ph
    谢谢大家
      

  4.   

    --生成测试数据
    IF OBJECT_ID('t1') IS NOT NULL
    DROP TABLE t1
    GO
    CREATE table t1(ph NVARCHAR(3), zsl INT)
    INSERT INTO t1
    SELECT  '001', 100 UNION ALL
    SELECT  '002', 200 UNION ALL
    SELECT  '003', 200IF OBJECT_ID('t2') IS NOT NULL
    DROP TABLE t2
    GO
    CREATE table t2(ph NVARCHAR(3), fhs INT)
    INSERT INTO t2
    SELECT  '001', 50 UNION ALL
    SELECT  '001', 10 UNION ALL
    SELECT  '002', 200--SQL Version:2005 with应用
    with a as (
    select ph ,SUM(fhs) fhs from t2 group by ph
    )select t1.ph 票号,t1.zsl 总数量,ISNULL(a.fhs,0) 发货数,ISNULL((t1.zsl-a.fhs),t1.zsl) 剩余数
     from t1 left join a on t1.ph=a.ph--result:
    票号   总数量         发货数         剩余数
    ---- ----------- ----------- -----------
    001  100         60          40
    002  200         200         0
    003  200         0           200(3 行受影响)