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 に答える