我正在使用隐藏的内部参数(@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以实现我想要的目标?
答案 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
条件限制结果集(如果有),以保证它永远不会返回多行。