1

フィルター処理する 2 つのパラメーターがあります。競合他社 ID が null またはゼロの場合は、別のテーブルのすべての競合他社 ID に対してセットをフィルター処理する必要があります。それ以外の場合は、競合他社 ID に対してフィルター処理する必要があります。

私は次のように書いていますが、すべての競合他社に対してフィルタリングするため、間違っています.

SELECT
       *
  FROM DashboardDataCache AS d
  WHERE ISNULL ( @CompetitorID , 0 ) = 0
     OR d.CompetitorID IN ( 
                            SELECT
                                   Value
                              FROM dbo.SessionFilters
                              WHERE SessionID = @SessionID
                                AND field IN ( 'competitor' , 'article_competitor' )) ;
4

2 に答える 2

1

次のようにクエリを変更してみてください。

SELECT
   *
FROM DashboardDataCache AS d
      -- Filter by ID if @CompetitorID is not null
WHERE (@CompetitorID IS NOT NULL AND d.CompetitorID = @CompetitorID)
      -- Otherwise, filter using SELECT
OR    (@CompetitorID IS NULL AND  d.CompetitorID IN (
          SELECT Value
          FROM dbo.SessionFilters
          WHERE SessionID = @SessionID
           AND field IN ( 'competitor' , 'article_competitor' )));
于 2013-11-06T11:14:50.763 に答える
0

そのようにしてみてください:

SELECT
       *
  FROM DashboardDataCache AS d
  WHERE (ISNULL ( @CompetitorID , 0 ) = 0 and d.CompetitorID = @CompetitorID)
     OR (ISNULL ( @CompetitorID , 0 ) != 0
         AND d.CompetitorID IN ( 
                            SELECT
                                   Value
                              FROM dbo.SessionFilters
                              WHERE SessionID = @SessionID
                                AND field IN ( 'competitor' , 'article_competitor' ))) ;
于 2013-11-06T11:14:33.170 に答える