解决了类似树型结构的查询语句

     晚上被一个类似树型结构的查询语句困扰  终于解决了。不过好象查询的效率不是很高

问题可以被抽象为求每个 hetongid 中的B的和   、D的和

 /*************************设计的测试表*****************************/

create table t( hetongid char(20),  A int, B int ,D int )

insert into t values ( '公司1',1 ,100 ,1 )
insert into t values ( '公司1',1 ,100 ,2 )
insert into t values ( '公司1',1 ,100 ,22 )
insert into t values ( '公司1',1 ,100 ,23 )

insert into t values ( '公司1',2 ,100 ,5 )
insert into t values ( '公司1',2 ,100 ,6 )

insert into t values ( '公司1',3 ,200 ,3 )
insert into t values ( '公司1',3 ,200 ,4 )

insert into t values ( '公司2',4 ,300 ,1 )
insert into t values ( '公司2',4 ,300 ,2 )
insert into t values ( '公司2',4 ,300 ,22 )
insert into t values ( '公司2',4 ,300 ,23 )


insert into t values ( '公司2',5 ,200 ,3 )
insert into t values ( '公司2',5 ,200 ,4 )

insert into t values ( '公司2',6 ,100 ,5 )
insert into t values ( '公司2',6 ,100 ,6 )


select * from t

/************************表的格式***********************/

hetongid            A         B    D

公司1                1       100    1
公司1                1       100    2
公司1                1      100      22
公司1                1      100     23
公司1                2       100    5
公司1                2      100     6
公司1                3      200     3
公司1                3      200     4
公司2                4      300     1
公司2                4      300    2
公司2                4      300    22
公司2                4      300    23
公司2                5      200    3
公司2                5     200     4
公司2                6     100     5
公司2                6      100    6

 

/********************错误的语句*********************************/
select * from t
select   hetongid,  sum( distinct (B)),SUM(D)
from  t
GROUP BY hetongid,A


/***************正确的语句*************/

select * from t

select   a.hetongid,  sum(a.b),SUM(a.d)
from  ( select hetongid,  sum( distinct (B)) as b,SUM(D) as d 
        from t
        group by hetongid,  A
      ) a                                  
GROUP BY hetongid

 

/*****************结果*********************/

公司1                400        66 

公司2               600           66 

 

                如果有更好的办法  请指点指点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值