0

我想编写一个选择语句,该语句应该根据通配符过滤数据。我写了这样的东西,但它不符合我的目的:

Select r.CompanyID,r.Description,c.BusinessUnitID,c.BusinessSourceID as BusinessSrcID,
c.Description as BusinessDesc from RCompanyTable r
join CBusinessUnitTable c on r.CompanyID=c.CompanyID
WHERE r.CompanyID like CASE WHEN COALESCE('Regexp(*)', '') = '' THEN r.CompanyID ELSE 'Company2'  END

但在此它总是执行 else 部分。 我正在寻找的是当我将 * 传递给条件时它应该给我所有数据。由于在我的 RCompanyTable 中我有两条记录 Company1 和 Company2,我希望如果我在该查询中传递 *,那么它应该返回 company1 和 company2 数据,但如果我通过 regexp(any1) 它应该向我提供 Comapany1 数据,如果这两个条件不正确,那么它应该转到显示 Company2 数据的其他部分 期待您的回答。提前致谢

4

2 回答 2

0
WHERE r.CompanyID = CASE WHEN r.CompanyId LIKE '%*%' THEN r.CompanyID ELSE 'Company2' END

这个 where 子句返回其中companyID有 * 的所有记录,或者companyID是 Company2。这就是你所追求的吗?

于 2013-06-11T06:01:35.713 回答
0

我不知道你到底想要什么*and regexp(any1),但假设它们是常量字符串,那么这个查询应该可以工作:

SET @parameter = '';    

Select r.CompanyID
    , r.Description
    , c.BusinessUnitID
    , c.BusinessSourceID AS BusinessSrcID
    , c.Description AS BusinessDesc 
    FROM RCompanyTable r
    JOIN CBusinessUnitTable c ON r.CompanyID = c.CompanyID
    WHERE (@parameter LIKE '%*%' AND r.CompanyID IN ('Company1', 'Company2'))
        OR (@parameter LIKE 'regexp(any1)' AND r.CompanyID = 'Company1')
        OR (@parameter NOT IN ('%*%', 'regexp(any1)') AND r.CompanyID = 'Company2')

@parameter是您要在查询中传递的内容。

于 2013-06-11T06:09:13.850 回答