2

我想使用以下语句

DECLARE @MatnrFilter TABLE ( ListValue VARCHAR(50) )

INSERT  INTO @MatnrFilter
    ( ListValue )
VALUES  ( '167436' )
INSERT  INTO @MatnrFilter
        ( ListValue )
VALUES  ( '167447' )

SELECT  *
FROM    ios.BaseData_2013
WHERE   Materialnummer IN ( CASE WHEN ( ( SELECT TOP 1
                                                ListValue
                                      FROM      @MatnrFilter
                                    ) IS NULL ) THEN Materialnummer
                             ELSE ( SELECT  *
                                    FROM    @MatnrFilter
                                  )
                        END ) 

我只想在@MtnrFilter 中有值时进行过滤。在这里我收到错误消息

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

还有另一种方法吗?

坦克安迪

4

2 回答 2

1
WHERE Materialnummer IN (SELECT ListValue FROM @MatnrFilter)
OR NOT EXISTS (SELECT * FROM @MatnrFilter)

似乎会覆盖它。表达式必须CASE返回单个标量值(每行)。

于 2013-09-24T08:31:05.793 回答
0

将 WHERE 语句更改为以下内容:

WHERE   NOT EXISTS(SELECT ListValue FROM @MatnrFilter)
        OR Materialnummer IN ( SELECT  ListValue FROM    @MatnrFilter)
于 2013-09-24T08:33:00.163 回答