如何使用 CASE 语句返回多于 1 个值

-2 t-sql

我需要用CASE生成WHERE IN ()语句,我试试这个:

SELECT * FROM table 
WHERE tbl_column IN ( CASE
                      WHEN @val = 1 THEN (SELECT * FROM (VALUES (2), (22)) AS X(a)
                      WHEN @val = 5 THEN (SELECT * FROM (VALUES (13), (18), (44)) AS X(a)
                      WHEN @val = 7 THEN (SELECT * FROM (VALUES (7)) AS X(a)
                      END
                    )
Run Code Online (Sandbox Code Playgroud)

但我收到错误:子查询返回了 1 个以上的值。

我应该怎么做?

ype*_*eᵀᴹ 6

您可以使用ANDOR

SELECT * 
FROM table 
WHERE ( @val = 1 AND tbl_column IN (2, 22) 
     OR @val = 5 AND tbl_column IN (13, 18, 44) 
     OR @val = 7 AND tbl_column IN (7)
      ) ;
Run Code Online (Sandbox Code Playgroud)

JOIN

SELECT t.* 
FROM table AS t
     JOIN 
         (VALUES (1,  2), (1, 22),
                 (5, 13), (5, 18), (5, 44)
                 (7,  7)
         ) AS x (val, a)
     ON  @val = x.val
     AND t.tbl_column = x.a ;
Run Code Online (Sandbox Code Playgroud)