代码之家  ›  专栏  ›  技术社区  ›  pavanred

带有事例语句的多个条件

  •  4
  • pavanred  · 技术社区  · 15 年前

    我需要查询一些数据。这是我构造的查询,但对我来说不太好。对于这个例子,我使用的是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
    

    这对我不起作用。在 THEN 相同的 CASE ?我怎样才能做到这一点?

    2 回复  |  直到 7 年前
        1
  •  4
  •   kamahl    15 年前

    另一种基于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
    
        2
  •  4
  •   Amadan    15 年前

    这不是剪贴。这个 CASE 表达式必须返回一个值,并且返回的字符串包含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
    

    我还怀疑这在某些方言中可能不起作用,但现在无法测试(甲骨文,我在看你),因为没有布尔语。

    然而,由于 @url 不依赖于表值,为什么不进行三个不同的查询,并根据参数选择要评估的内容?