解决方案 »

  1.   

    select  A.项目名称,B1.客户名称,B1.客户层级,C.客户代码,C.客户消费,B1.上级客户代码
    from A,
      (SELECT B.*,LEVEL 客户层级 FROM B
       CONNECT BY PRIOR 客户代码=上级客户代码
       START WITH 上级客户代码 IS NULL) B1,
      (SELECT 客户代码,SUM(客户消费) 客户消费 FROM C
       GROUP BY 客户代码) C1
    where A.客户代码=C.客户代码 AND B.客户代码=C.客户代码
      

  2.   

    MSSQL 没有 CONNECT BY
    START WITH 吧
      

  3.   

    oracle有啊,这是oracle版的问题啊
      

  4.   

    ---------------------------------------------------------------------------------------------------------
    显然是错误的,在上述条件下,如果表A没有将某个客户的下级客户列出,比如上面的客户E,是客户D的下级客户,因为在表A中未直接对应到项目B。但按你的语句也无法被统计在项目B中。
    请高手再帮助!
    谢谢!
    -----------------------------
      

  5.   

    A表存储的固定是顶级的客户对吧
    可以用CONNECT_BY_ROOT(客户代码) 获取某个客户的最上级客户的代码
    select  A.项目名称,B1.客户名称,B1.客户层级,C.客户代码,C.客户消费,B1.上级客户代码
    from A,
      (SELECT B.*,LEVEL 客户层级,CONNECT_BY_ROOT(客户代码) TREEROOT FROM B
       CONNECT BY PRIOR 客户代码=上级客户代码
       START WITH 上级客户代码 IS NULL) B1,
      (SELECT 客户代码,SUM(客户消费) 客户消费 FROM C
       GROUP BY 客户代码) C1
    where A.客户代码=C.客户代码 AND B.TREEROOT=C.客户代码
      

  6.   

    ---------------------------------------------------------------------------------------------------------
    非常感谢,用treeroot可以解决这个问题,关键是你分别将递归、group by 分开做子查询,让我思路一下子清晰了!