日期:2014-05-18  浏览次数:20413 次

这样的表及查询用存储过程如何做
功能:
查询某时间段内销售信息
人员级别有,销售总载-销售总监-区域经理-区域小组长-区域客户经理
要求不同人员进入查询界面后,只能查询包括自己权限以下的所有人员的销售信息
如销售总载能查询所有信息,销售总监能查询自己所管理的区域(销售总监管理多区域),区域经理只能查询自己所管理区域,小组长只能查询自己所管的小组,客户经理只能查自己.(其中,总监,小组长都有自己的客户,总载没有)

区域表:
AreaId AreaName
职务表:
DepWorkId DepWork
用户用如下:
userID AreaId(区域ID) DepWorkId(职务ID)

客户信息:
CardNo UserId

客户消费信息:
CardNo ProductId OpTime(消费时间)

产品信息:
ProductId Price

请问题这样要达到按人员进入页面后根据自己的权限 按区域/小组/客户经理进行查询客户经理的销售信息,这样的权限表如何建?
查询存储过程如何建?

我自己建了一个人员管理归属表:
UserId FatherId(上级管理人员ID)










------解决方案--------------------

不需要建立
我自己建了一个人员管理归属表: 
UserId FatherId(上级管理人员ID) 

只要在职务表里面增加一个fatherId就可以了
------解决方案--------------------
要求不同人员进入查询界面后,只能查询包括自己权限以下的所有人员的销售信息 

--

看看BOM

给一个例子

SQL code
--生成测试数据
create table BOM(ID INT,PID INT,MSG VARCHAR(1000))
insert into BOM select 1,0,NULL
insert into BOM select 2,1,NULL
insert into BOM select 3,1,NULL
insert into BOM select 4,2,NULL
insert into BOM select 5,3,NULL
insert into BOM select 6,5,NULL
insert into BOM select 7,6,NULL
go

--创建用户定义函数用于取每个父节点下子节点的采购配置信息
create function f_getChild(@ID VARCHAR(10))
returns @t table(ID VARCHAR(10),PID VARCHAR(10),Level INT)
as
begin
    declare @i int
    set @i = 1
    insert into @t select ID,PID,@i from BOM where PID = @ID
    
    while @@rowcount<>0
    begin
        set @i = @i + 1
        
        insert into @t 
        select 
            a.ID,a.PID,@i 
        from 
            BOM a,@t b 
        where 
            a.PID=b.ID and b.Level = @i-1
    end
    return
end
go

--执行查询
select ID from dbo.f_getChild(3)
go

--输出结果
/*
ID
----
5
6
7
*/

--删除测试数据
drop function f_getChild
drop table BOM