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子句)

+0

而不是独特的尝试顶部1 –

+0

没有我不能因为该列有多个值 – Vickyster

+0

THEN子句可能不会返回超过1个值。 – jarlh

你需要像这样

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='',因为它选择主表(人数)的所有行无子查询的需要。