SSRS 2008 - 选择案例......当......那么

时间:2011-06-24 01:27:22

标签: visual-studio-2008 sql-server-2008 ssrs-2008

我正在使用隐藏的内部参数(@DoorHelper)来检查我正在使用的另一个参数(@Door)是否包含我用来表示'global'('9999')的特殊值,并在这种情况下返回所有Doors。

SELECT 
CASE 
WHEN ('9999'+'-'+ RIGHT(Unknown1,1) in (@Door)) 
THEN (SELECT DISTINCT [Zone]+' - '+CAST([OfficeID] as char(5)) FROM [ADB].[dbo].[ZoneByOffice])
ELSE (@Door)
END AS ZoneID
FROM [ADB].[dbo].[EventLog]

问题是,从THEN返回多于1个结果似乎会抛出错误。

如何改进此SQL以实现我想要的目标?

1 个答案:

答案 0 :(得分:1)

您可以使用TOP 1

SELECT 
    CASE 
        WHEN ('9999'+'-'+ RIGHT(Unknown1,1) in (@Door)) 
        THEN (SELECT TOP 1 [Zone]+ ' - '+ CAST([OfficeID] as char(5)) FROM [ADB].[dbo].[ZoneByOffice])
        ELSE (@Door)
    END AS ZoneID
FROM [ADB].[dbo].[EventLog]

或者您使用WHERE条件限制结果集(如果有),以保证它永远不会返回多行。