Sql 带有CASE语句的多个条件

Sql 带有CASE语句的多个条件,sql,sql-server,case,where-clause,Sql,Sql Server,Case,Where Clause,我需要查询一些数据。这里是我已经构建的查询,但它对我来说不是很好。对于这个例子,我使用的是AdventureWorks数据库 SELECT * FROM [Purchasing].[Vendor] WHERE PurchasingWebServiceURL LIKE case // In this case I need all rows to be returned if @url is '' or 'ALL' or NULL when (@url IS null OR @url = ''

我需要查询一些数据。这里是我已经构建的查询,但它对我来说不是很好。对于这个例子,我使用的是AdventureWorks数据库

SELECT * FROM [Purchasing].[Vendor] WHERE PurchasingWebServiceURL LIKE 
case
// In this case I need all rows to be returned if @url is '' or 'ALL' or NULL
 when (@url IS null OR @url = '' OR @url = 'ALL') then ('''%'' AND PurchasingWebServiceURL IS NULL')
//I need all records which are blank here including nulls
         when (@url = 'blank') then (''''' AND PurchasingWebServiceURL IS NULL' )
//n this condition I need all record which are not like a particular value
         when (@url = 'fail') then ('''%'' AND PurchasingWebServiceURL NOT LIKE ''%treyresearch%''' )
//Else Match the records which are `LIKE` the input value
         else '%' + @url + '%' 
    end

这对我不起作用。如何在同一个
案例的
然后
中有多个where条件子句
?我怎样才能做到这一点呢?

这不是剪切粘贴。
CASE
表达式必须返回一个值,并且您正在返回一个包含SQL的字符串(从技术上讲,SQL是一个值,但类型错误)。这就是你想写的,我想:

SELECT * FROM [Purchasing].[Vendor] WHERE  
CASE
  WHEN @url IS null OR @url = '' OR @url = 'ALL'
    THEN PurchasingWebServiceURL LIKE '%'
  WHEN @url = 'blank'
    THEN PurchasingWebServiceURL = ''
  WHEN @url = 'fail'
    THEN PurchasingWebServiceURL NOT LIKE '%treyresearch%'
  ELSE PurchasingWebServiceURL = '%' + @url + '%' 
END
我还怀疑这在某些方言中可能不起作用,但现在无法测试(Oracle,我在看你),因为没有布尔值


但是,既然
@url
不依赖于表值,为什么不进行三种不同的查询,并根据您的参数选择要计算的查询?

另一种基于amadan的方法:

    SELECT * FROM [Purchasing].[Vendor] WHERE  

      ( (@url IS null OR @url = '' OR @url = 'ALL') and   PurchasingWebServiceURL LIKE '%')
    or

       ( @url = 'blank' and  PurchasingWebServiceURL = '')
    or
        (@url = 'fail' and  PurchasingWebServiceURL NOT LIKE '%treyresearch%')
    or( (@url not in ('fail','blank','','ALL') and @url is not null and 
          PurchasingWebServiceUrl Like '%'+@ur+'%') 
END

谢谢你,阿玛丹。我正在使用SQL Server,此查询无法正常工作。它抛出一个语法错误。我想案例陈述不能像这样使用。我尝试过这个方法,因为出现了语法错误,我尝试将where子句构造为字符串(正如我在前面的问题中所发布的),但是经过一点思考,我可以找出它的错误,但我不确定如何使其正确。这让我想知道为什么我只使用CASE语句来尝试这样做。我想我可以根据需要使用它来构造查询。基本上是:条件1或条件2或条件3或(!条件1和!条件2和!条件3和条件4)没问题=)