需要SSRS 2008 SQL语句帮助

时间:2013-12-17 00:02:32

标签: sql sql-server-2008 reporting-services

我希望有人可以帮助我。我有一份报告,将由一个salesrep,一个区域销售经理(有几个销售报告给他)和“全部”经理人运行,他们应该能够看到所有的销售报告。如果用户是销售额,他应该只能看到分配给他的客户;如果用户是区域经理,他应该看到他的客户以及分配给他管理的销售代表的所有其他客户;并且“全面”经理应该能够看到每一个销售代表及其所有客户。

我们有一个salesrep表(SALESMAN_MSID),它有salesrep#,他们的MSID值,他们的区域经理rep#,以及他们的用户类型 - “S”表示他们是salesrep,“R”表示他们是区域经理,“M”表示他们是全职经理。这是我到目前为止的查询:

select distinct s.slsm_num, s.slsm_desc
from salesman s
where
    s.slsm_num in (select distinct slsm_num
                    from salesman_msid
                    where slsm_mgr_id = (@SlsmnRealNum))      
    or (s.slsm_num = (@SlsmnRealNum))
order  by s.slsm_desc

如果用户是salesrep或Reg Mgr,这很有效,但我无法弄清楚如何编写sql以使所有结果都能正常工作。参数“@SlsmnRealNum”中的值是它们的实际salesrep#。

SALESMAN_MSDI表中的值如下:

Slsm_num    MSID        Slsm_mgr_id       User_Type
------------------------------------------------------
1379       ljones        1316                S
1316       pcuday        1316                R
1401       mmay                              M

如果我在“或user_type ='M'中添加条款,无论我是作为S还是R进行测试,我都会得到所有代表。

任何人都可以帮助SQL语句让“M”返回除了其他2之外的其他所有内容吗?

ETA:这是新的sql语句(在我的评论中无法适应它?) - 再次感谢@Sklivvz!  选择DISTINCT S.SLSM_NUM,S.SLSM_DESC来自SALESMAN S,其中S.SLSM_NUM IN(SELECT DISTINCT M.slsm_num   来自SALESMAN_MSID M.  在哪里M.slsm_num =(@SlsmnRealNum) - 自己     或者(m.slsm_mgr_id =(@SlsmnRealNum)和EXISTS - 如果是R型,他们的下属         (选择1            来自SALESMAN_MSID m           WHERE m.slsm_num =(@SlsmnRealNum)             AND m.User_Type ='R'))     或EXISIS(选择1 - 如果键入M,则为每个人           来自SALESMAN_MSID M.          WHERE m.slsm_num =(@SlsmnRealNum)            AND m.USER_TYPE ='M'))s.slsm_desc的排序enter code here

1 个答案:

答案 0 :(得分:1)

您需要对表进行子查询以区分类型:

SELECT DISTINCT slsm_num, slsm_desc
  FROM salesman
 WHERE slsm_num = @SlsmnRealNum  --Themselves
    OR (slsm_mgr_id = @SlsmnRealNum AND EXISTS -- Their subordinates if type R
        (
         SELECT 1 
           FROM salesman 
          WHERE slsm_num = @SlsmnRealNum 
            AND User_Type = 'R'
        )
       )
    OR EXISTS ( -- Everyone if type M
        SELECT 1 
          FROM salesman 
         WHERE slsm_num = @SlsmnRealNum 
           AND User_Type = 'M'
    )