TSQL基于当前用户
部门的鲜明名单我连想怎么短语的正确此为标题。TSQL基于当前用户
我有一个名为Department
multi-valued parameter
的SSRS报告。
如果用户是
Department A
......我们想默认为所有部门EXCEPT A部门如果用户IS NOT IN
Department A
......我们希望仅默认他们的部门
部门A将永远不会在参数列表中,但作为部门A的成员会影响您将看到的内容。
我知道我可以用
ALL
参数选项解决这个问题,但我宁愿唯一的参数值是有效的部门名称
我的参数填入两个数据集。 第一个数据集有有效的部门三个选项:EUR
,REM
,LIFA
第二个数据集仅确定当前用户的部门,并会填充默认值。 IF
当前用户的部门CS
我们要选择的其他三个部门作为默认值。如果他们的部门<> CS
我们希望仅默认他们的部门。
我想下面的代码的工作,但在连接字符串是不是在第一个数据集的选项,因此它不能是默认选项
SELECT DISTINCT
CASE
WHEN EmployeePracticeArea = 'CS'
THEN 'EUR, LIFA, REM'
ELSE EmployeePracticeArea
END AS 'EmployeePracticeArea'
FROM DimEmployee
WHERE
(EmployeePracticeArea <> '')
AND (UserLogin = @CurrentUser)
与case语句的问题是,它会尝试设置默认值EUR, LIFA, REM
。该字符串不存在于“选项”值列表中。选项有三个独立的串EUR
,LIFA
,REM
。所以我需要评估当前用户的部门,然后没有它返回一个列表
Case语句不能返回多个值
这里有一些东西,会产生数据集为你
IF OBJECT_ID('tempdb..#TestData') IS NOT NULL
DROP TABLE #TestData;
WITH Data (EmployeePracticeArea) AS (
SELECT 'LIFA'
UNION
SELECT 'REM'
UNION
SELECT 'EUR'
UNION
SELECT 'CS'
)
SELECT * INTO #TestData FROM Data ;
最后的结果是这样的: 用户1在LIFA部门自己的参数默认为刚刚LIFA 用户2在CS部门自己的参数默认为欧元,LIFA ,REM
DECLARE @t TABLE(Dept varchar(4))
DECLARE @CurrentUserDept varchar(4) = (SELECT EmployeePracticeArea FROM dimEmployee WHERE UserLogin = @CurrentUser)
IF @CurrentUserDept = 'CS'
BEGIN
INSERT INTO @t VALUES ('EUR'), ('LIFA'), ('REM')
END
ELSE
BEGIN
INSERT INTO @t SELECT @CurrentUserDept
END
SELECT * FROM @t
太棒了,非常感谢。我从不在我的TSQL中使用'IF'语句,但我必须开始 – gruff
很高兴我可以提供帮助。我仍然在这方面学到很多东西,我已经从事这项工作数十年了! :) –
'CASE'表达式似乎写得很对 - 我不认为我在理解你在做什么...你能展示样本数据和期望的结果吗? – Siyual