2013-04-25 2 views
1

Я пытаюсь создать следующее в инструкции where.SQL server IF begin statement in where function

where Registration_Date >[email protected] 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 имеет нулевое значение, используйте вход @Channel для всех партнерских идентификаторов, если нет, то используйте конкретный @AffiliateId, независимо от каналов.

Есть ли способ, которым я мог бы сделать эту работу?

ответ

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 
     ) 

В SQL Server 2008, DATE(column) является sargable выражением.

+0

Это прекрасно работает! – angeliki