2个表,业务员表,和代理商表(Guest)
其中代理商表(Users) 包含的有(全国代理,省级代理,市级代理) 有个字段grade 来区分。有个字段UID 来标示 他属于谁
然后  有个功能是查询业绩。
1.当全国代理查询的时候,只显示的是他手下的省级代理。 
字段(Users表):
 联系人(userName), 业绩*(Money)。
这个业绩是  业绩是根据 全国代理 下面得到每个省级代理。  然后把 省级代理下的市级代理的Money 加总 。
2.当省级代理查询的时候,只显示他手下的市级代理。
字段(Users表):
 联系人(userName), 业绩*(Money)。
这个业绩是根据 省级代理 得到 下面的市级代理,然后 把市级代理下的所有业务员(Guest有个字段是UID)的Money 加总。
3.当市级代理查询的时候,直接显示 业务员信息。
------------------------
请问各位这个改怎么写?存储过程? 视图?还是在程序里?

解决方案 »

  1.   

    程序的session里 有个变量是 标示 身份的, 全国代理,省级代理等等,
      

  2.   

    --看看这个对你是否有用
    CREATE TABLE tb(ID INT,PID int,Name nvarchar(10))
    INSERT tb SELECT 1,0,N'部门1'
    UNION ALL SELECT 2,0,N'部门2'
    UNION ALL SELECT 3,1,N'部门1.1'
    UNION ALL SELECT 4,3,N'部门1.1.1'
    UNION ALL SELECT 5,4,N'部门1.1.1.1'
    UNION ALL SELECT 6,2,N'部门2.1'
    UNION ALL SELECT 7,6,N'部门2.1.1'
    UNION ALL SELECT 8,7,N'部门2.1.1.1'
    GO
    --查询指定节点及其所有子节点的函数
    CREATE FUNCTION f_Cid(@ID INT)
    RETURNS @t_Level TABLE(ID INT,Level int)
    AS
    BEGIN
        DECLARE @Level int
        SET @Level=1
        INSERT @t_Level SELECT @ID,@Level
        WHILE @@ROWCOUNT>0
        BEGIN
            SET @Level=@Level+1
            INSERT @t_Level SELECT a.ID,@Level
            FROM tb a,@t_Level b
            WHERE a.PID=b.ID
                AND b.Level=@Level-1
        END
        RETURN
    END
    GO
    --调用函数查询节点[ 1 ]及其所有子节点
    SELECT a.*
    FROM tb a,f_Cid(1) b
    WHERE a.ID=b.ID
    /*--结果
    ID          PID         Name       
    ----------- ----------- ---------- 
    1           0           部门1
    3           1           部门1.1
    4           3           部门1.1.1
    5           4           部门1.1.1.1(4 row(s) affected)
    --*/
    DROP FUNCTION F_Cid
    DROP TABLE TB
      

  3.   


    select sum(total),T_User.UserName from Employee where  [Uid] in 
                 ( 
                   select uniqueID from T_User where [Uid] =1
                  )
    你们 看这个我怎么样能 用sum的同时 还能把  T_User的UserName 显示?
      

  4.   

    select sum(total),T_User.UserName from Employee where  [Uid] in 
                 ( 
                   select uniqueID from T_User where [Uid] =1
                  )  group by T_User.UserName
      

  5.   

    我这样做出来了 不过感觉很笨create proc SearchPerformance_pro(@classname int,@ID int)as
    declare @n int;
    declare @tab table(UniqueID int, CreateDateTime DATETIME, Title Nvarchar(50),ActivityType Nvarchar(50),NewActivity INT);begin
        --业务员查询
    if @classname=3
    begin
    select * from dbo.Guest where Eid=@ID
    end
        --市级代理查询
    else if @classname=2
            begin
     select * from dbo.Employee where [Uid]=@ID
    end
        --省级代理查询
    else if @classname=1
            begin
    select E.[Uid]  , (select UserName from T_User where UniqueID=E.[Uid]) as UserName, (select UserTel  from T_User where UniqueID=E.[Uid]) as UserTel, sum(total) as Total from Employee as e
     where  E.[Uid] in
     ( 
       select uniqueID from T_User where [Uid] =1
      ) group by e.uid
            end
        --全国代理查询
    else if @classname=0
            begin
              select   u.uiD,(select UserName from T_User where UniqueID=u.uiD) as UserName, (select UserTel  from T_User where UniqueID=u.uiD) as UserTel, sum(total) as Total from T_User as U
     where  uniqueID in
     ( 
       select uniqueID from T_User as B where [Uid] in
                                (
                                   select uniqueID from T_User where [Uid]=@ID
                                 )   
      ) GROUP by U.[Uid]
            end
    end
      

  6.   

    这一段可简化为:
    --省级代理查询
    else if @classname=1
            begin
    select E.[Uid], T.UserName,T.UserTel,sum(total) as Total 
    from Employee as E JOIN T_User T
    on E.Uid=T.uniqueId
    where  T.[Uid] =1
    group by E.uid
            end
      

  7.   

    这一段可简化为:
    --全国代理查询
    else if @classname=0
            begin
    select [UiD],UserName, UserTel,sum(total) as Total 
    from T_User
    where  uniqueID=@ID
    GROUP by [Uid],UserName,UserTel
            end
      

  8.   

    你的逻辑是不是有错误? 像这样的事情还是在外部去做
    既然你的session 中放了标示 身份的, 全国代理,省级代理 变量
    你可以根据变量的不同 去让页面跳转  执行语句是提前分好的
    不一定非要使用一条sql 去执行权限的分划
    这样也会节省sql执行的时间 
    查询效率也会提高