2013-04-25 36 views
1

我试图在where语句中创建以下内容。SQL服务器如果在哪里函数开始语句

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输入所有加盟的ID,如果没有则使用特定的@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 2008DATE(column)是可优化搜索表达。

+0

这个工程很漂亮! – angeliki 2013-04-25 11:19:58