SQL Server子查询返回了多个值。这当子查询跟随不允许=,!=,<, <= , >,> =(即使我使用IN子句)
问题描述:
SELECT Count(*)
FROM headcount
WHERE [mso/bu2] = @MSOBU
AND [status] = 'billable'
AND [location type] = 'offshore'
AND [vertical group] = @Vertical
AND lob IN(CASE
WHEN @LOB = 'dgtl' THEN (SELECT DISTINCT lob
FROM lob
WHERE category = 'esg')
WHEN @LOB = 'nondgtl' THEN (SELECT DISTINCT lob
FROM lob
WHERE category <> 'esg')
WHEN @LOB = '' THEN (SELECT DISTINCT lob
FROM headcount)
END)
我陷进这个错误,即使我使用IN子句SQL Server子查询返回了多个值。这当子查询跟随不允许=,!=,<, <= , >,> =(即使我使用IN子句)
答
你需要像这样
SELECT Count(*)
FROM headcount
WHERE [mso/bu2] = @MSOBU
AND [status] = 'billable'
AND [location type] = 'offshore'
AND [vertical group] = @Vertical
AND ((@LOB = 'dgtl'
AND lob IN (SELECT DISTINCT lob
FROM lob
WHERE category = 'esg'))
OR (@LOB = 'nondgtl'
AND lob IN (SELECT DISTINCT lob
FROM lob
WHERE category <> 'esg'))
OR @LOB = ''))
+0
@Vickyster - 很高兴帮助你。欢迎来到SO,如果我的回答或Mike的回答帮助你解决了这个问题,那么你可以通过选择左边的刻度线来标记它作为答案,答案对你有帮助 –
+0
是的,我希望但我只有3个声望。 。我的不好..但我会尽快将此标记为答案 – Vickyster
答
CASE的操作数WHEN 必须由一个值,而不是多行。
尝试重写查询这样的:
select COUNT(*)
from HeadCount
where [MSO/BU2][email protected] and [Status]='billable'
and [Location Type]='offshore' and [Vertical Group]= @Vertical
and (@LOB=''
OR
LOB in(
select distinct lob from LOB
where (@LOB='dgtl' and Category ='esg') OR
(@LOB='nondgtl' and Category<>'esg')
)
)
对于@LOB=''
,因为它选择主表(人数)的所有行无子查询的需要。
而不是独特的尝试顶部1 –
没有我不能因为该列有多个值 – Vickyster
THEN子句可能不会返回超过1个值。 – jarlh