1

whereステートメントで次を作成しようとしています。

    where Registration_Date >=@StartDate and Registration_Date < dateadd(day,1,@EndDate) 
        and if @affiliateid is null begin Channel in (select Value from dbo.Split(',',@Channel)) end 
             else Affiliate_Id in (select Value from dbo.Split(',', @AffiliateId))
        and Registration_Channel in (select Value from dbo.Split(',', @Channel))

したがって、@AffiliateId が null の場合は、すべてのアフィリエイト ID に @Channel 入力を使用し、そうでない場合は、チャネルに関係なく特定の @AffiliateId を使用することを言おうとしています。

これを機能させる方法はありますか?

4

1 に答える 1

1
SELECT  *
FROM    mytable
WHERE   DATE(registration_date) BETWEEN @startDate AND @endDate
        AND EXISTS
        (
        SELECT  NULL
        FROM    dbo.split(',', COALESCE(@affiliateId, @channel))
        WHERE   value = CASE WHEN @affiliateId IS NULL THEN channel ELSE affiliateId END
        )
        AND EXISTS
        (
        SELECT  NULL
        FROM    dbo.split(',', @channel)
        WHERE   value = registration_channel
        )

In SQL Server 2008,DATE(column)はサージ可能な式です。

于 2013-04-25T10:57:58.197 に答える