2个表,业务员表,和代理商表(Guest)
其中代理商表(Users) 包含的有(全国代理,省级代理,市级代理) 有个字段grade 来区分。有个字段UID 来标示 他属于谁
然后 有个功能是查询业绩。
1.当全国代理查询的时候,只显示的是他手下的省级代理。
字段(Users表):
联系人(userName), 业绩*(Money)。
这个业绩是 业绩是根据 全国代理 下面得到每个省级代理。 然后把 省级代理下的市级代理的Money 加总 。
2.当省级代理查询的时候,只显示他手下的市级代理。
字段(Users表):
联系人(userName), 业绩*(Money)。
这个业绩是根据 省级代理 得到 下面的市级代理,然后 把市级代理下的所有业务员(Guest有个字段是UID)的Money 加总。
3.当市级代理查询的时候,直接显示 业务员信息。
------------------------
请问各位这个改怎么写?存储过程? 视图?还是在程序里?
其中代理商表(Users) 包含的有(全国代理,省级代理,市级代理) 有个字段grade 来区分。有个字段UID 来标示 他属于谁
然后 有个功能是查询业绩。
1.当全国代理查询的时候,只显示的是他手下的省级代理。
字段(Users表):
联系人(userName), 业绩*(Money)。
这个业绩是 业绩是根据 全国代理 下面得到每个省级代理。 然后把 省级代理下的市级代理的Money 加总 。
2.当省级代理查询的时候,只显示他手下的市级代理。
字段(Users表):
联系人(userName), 业绩*(Money)。
这个业绩是根据 省级代理 得到 下面的市级代理,然后 把市级代理下的所有业务员(Guest有个字段是UID)的Money 加总。
3.当市级代理查询的时候,直接显示 业务员信息。
------------------------
请问各位这个改怎么写?存储过程? 视图?还是在程序里?
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
select sum(total),T_User.UserName from Employee where [Uid] in
(
select uniqueID from T_User where [Uid] =1
)
你们 看这个我怎么样能 用sum的同时 还能把 T_User的UserName 显示?
(
select uniqueID from T_User where [Uid] =1
) group by T_User.UserName
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
--省级代理查询
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
--全国代理查询
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
既然你的session 中放了标示 身份的, 全国代理,省级代理 变量
你可以根据变量的不同 去让页面跳转 执行语句是提前分好的
不一定非要使用一条sql 去执行权限的分划
这样也会节省sql执行的时间
查询效率也会提高