有两个表,
总表数据(zb)
总表编号  总表名称  分表总用水量 分表编号
1        A村总表     ?         1001,1002,1003
2        b村总表     ?         1005,1006
...分表数据(fb)
分表编号  分表名称    用水量  
1001      A村101号     10
1002      A村201号     5
1003      A村101号     20
1005      B村1号       15
1006      B村2号       5
...
1075      G村1号       5如何将分表中的 “用水量” 合计放在 总表的对应记录“分表总用水量”中
上面的总表的数据应为总表编号  总表名称  分表总用水量 分表编号
1        A村总表     35         1001,1002,1003
2        b村总表     20         1005,1006,

解决方案 »

  1.   


    --手工写,没测试过
    select a.*,[sum_用水量] = sum(b.用水量)
    from zb a,
        fb b
    where charindex(','+cast(b.分表编号 as varchar)+',',','+a.分表编号+',')>0
    group by a.总表编号,a.总表名称,a.分表总用水量,a.分表编号
      

  2.   

    SELECT A.*,,SUM(B.用水量) FROM A,B WHERE CHARINDEX(','+LTRIM(B.分表编号)+',',','+A.分表编号+',')>0GROUP BY A.总表编号,A. 总表名称 ,A. 分表编号
      

  3.   


    create table #zb(
        总表编号 int,
        总表名称 nvarchar(10),
        分表总用水量 int,
        分表编号 varchar(50)
    )
    insert into #zb
    select 1,'A村总表',null,'1001,1002,1003' union all
    select 2,'b村总表',null,'1005,1006'create table #fb(
        分表编号 int,
        分表名称 nvarchar(10),
        用水量   int
    )
    insert into #fb
    select 1001,'A村101号',10 union all
    select 1002,'A村201号',5  union all
    select 1003,'A村101号',20 union all
    select 1005,'B村1号',15  union all
    select 1006,'B村2号',5select a.*,[sum_用水量] = sum(b.用水量)
    from #zb a,
        #fb b
    where charindex(','+cast(b.分表编号 as varchar)+',',','+a.分表编号+',')>0
    group by a.总表编号,a.总表名称,a.分表总用水量,a.分表编号--结果
    /*
    总表编号        总表名称       分表总用水量      分表编号                                               sum_用水量
    ----------- ---------- ----------- -------------------------------------------------- -----------
    1           A村总表       NULL        1001,1002,1003                                     35
    2           b村总表       NULL        1005,1006                                          20(2 行受影响)
    */
      

  4.   

    简单明了
    select left(分表名称,2) as 总表名称,sum(用水量)as 总用水量 
    into #temp
    from fb group by left(分表名称,2)update zb set 分表总用水量=(select 总用水量 from #temp where left(zb.总表名称,2)=总表名称)
      

  5.   

    用 kerafan 的方法,加上更新语句update zb
    set zb.分表总用水量=b.分表总用水量
    from zb a
    left join (
    select 总表名称,SUM(用水量) 分表总用水量
    from zb,fb
    where CHARINDEX(','+LTRIM(fb.分表编号)+'',','+zb.分表编号+',')>0
    group by zb.总表名称
    ) b on a.总表名称=b.总表名称
      

  6.   

    别人写的update zb set 分表总用水量=(
    select SUM(用水量) from fb where CHARINDEX(','+LTRIM(分表编号)+'',','+zb.分表编号+',')>0 )
      

  7.   

    yekang_cui  的语句不能用
      

  8.   

    不好意思,yekang_cui 的语句能用,谢谢!