A 表ID,Type,TypeNo,batchMoney
1   WWW   001     1000
2   WWW   002     3000
3   CCC   003     4000B表Type,TypeNo Money
WWW   001     500
WWW   001     10
WWW   001     20
WWW   002     200
WWW   002     300
WWW   003     400
结果:
Type,TypeNo,batchMoney  TotalMoney( sum(Money) )
WWW   001     1000         530
WWW   002     3000         500
WWW   003     4000         400我的方法
Select A.Type,A.TypeNo,A.batchMoney,Sum(B.Money) as TotalMoney
From A Left join B ON
A.Type=B.Type and A.TypeNo = B.typeNoGroup by 
A.Type,A.TypeNo,A.batchMoney,
B.Type,B.TypeNo我的方法好像非常笨,B数据一旦非常庞大,Group这么多列,很慢,搞不懂怎么优化!那位帮忙优化一下  

解决方案 »

  1.   

    试试
    select a.*,c.TotalMoney from a left join (select B.Type,B.TypeNo,Sum(B.Money) as TotalMoney from b group by B.Type,B.TypeNo) C on A.Type=c.Type and A.TypeNo = c.typeNo
      

  2.   

    Select A.Type,A.TypeNo,A.batchMoney, C.TotalMoney
    From A Left join
    (select B.Type,B.TypeNo ,Sum(B.Money) as TotalMoney from B Group by
    B.Type,B.TypeNo) C 
    ON
    A.Type=C.Type and A.TypeNo = C.typeNo不知道这样是不是快点 你最好区SQL区问问,那边专家多 哈哈
     
      

  3.   

    b表group后再与a关联
    这样乘积的记录数会少很多
      

  4.   

    SELECT TYPE,TYPENO,batchMoney ,
    CASE TYPENO WHEN TYPENO THEN  (SELECT ISNULL(SUM(MONEY),0) FROM B WHERE TYPE=A.TYPE AND TYPENO=A.TYPENO) ELSE 0   END AS SS
    FROM A確認
     A 表 
    ID,Type,TypeNo,batchMoney 
    1  WWW  001    1000 
    2  WWW  002    3000 
    3  CCC  003    4000       <和B表 Type,TypeNo Money 
    WWW  001    500 
    WWW  001    10 
    WWW  001    20 
    WWW  002    200 
    WWW  002    300 
    WWW  003    400     <
      

  5.   

    已经很快了
    ID,Type,TypeNo,batchMoney
    1  WWW  001    1000
    2  WWW  002    3000
    3  CCC  003    4000如果TypeNo是唯一的,可以建立聚集索引,ID建立索引后,效果不是很明显。
    索引只有在你使用的情况下才能发挥最大效用

    结合二楼的:
    Select A.Type,A.TypeNo,A.batchMoney, C.TotalMoney
    From 
    (select B.Type,B.TypeNo ,Sum(B.Money) as TotalMoney from B Group by
    B.Type,B.TypeNo) C Left join A
    ON
    A.Type=C.Type and A.TypeNo = C.typeNo
      

  6.   

    你写的代码效率可能不高,原因是1、条件关联的太早,B表数据量一旦比较大,统计的时候可能比较长;
    2、Group By 后面的字段重复,Type,TypeNo已经作为表间关联了,Group By 一次就可以了;比较高率一点的代码 10楼的就可以:Select A.Type,A.TypeNo,A.batchMoney, C.TotalMoney
    From 
    (select B.Type,B.TypeNo ,Sum(B.Money) as TotalMoney from B Group by
    B.Type,B.TypeNo) C Left join A
    ON
    A.Type=C.Type and A.TypeNo = C.typeNo