【问题标题】:search in sql in multiple column if one is empty then get from another如果一列为空,则在多列中搜索 sql,然后从另一列获取
【发布时间】:2015-02-02 09:53:56
【问题描述】:
WITH FilteredClient AS
(
    SELECT 
        Client.ClientId, Client.PersonId, Client.ClientCompanyId, 
        Client.ClientCategoryId, Client.IsImported, Client.IsModified, 
        Client.StatusId, Client.ClientTypeId, Client.LeadSourceId, 
        Person.Company, Person.FirstName, Person.MiddleName, 
        Person.LastName, Person.AddressLine1, Person.AddressLine2, 
        Person.AddressLine3, Person.City, Person.State, 
        Person.Country, Person.Zip, 
        Person.HomePhone, Person.WorkPhone, Person.CellPhone, 
        Person.Fax, Person.EmailId, Person.Website, 
        ClientStatus.ClientStatusName, 
        ClientCategory.ClientCategoryName, 
        ClientType.ClientTypeName, LeadSource.LeadSourceName,
        [User].Username, Client.AddedBy, [User].UserId
    FROM 
        Client 
    INNER JOIN
        ClientCategory ON Client.ClientCategoryId = ClientCategory.ClientCategoryId 
    INNER JOIN
        Person ON Client.PersonId = Person.PersonId
    INNER JOIN 
        ClientType ON Client.ClientTypeId = ClientType.ClientTypeId 
    INNER JOIN
        ClientStatus on Client.StatusId = ClientStatus.ClientStatusId  
    INNER JOIN
        LeadSource on Client.LeadSourceId = LeadSource.LeadSourceId 
    INNER JOIN
        [User] ON [User].UserId = Client.AddedBy
    WHERE     
        (Client.CompanyId = 1
        AND ClientCategory.ClientCategoryName LIKE ('%%')
        AND ClientType.ClientTypeName LIKE ('%%')
        AND ClientStatus.ClientStatusName LIKE ('%%')
        AND LeadSource.LeadSourceName LIKE ('%%')
        AND (Person.FirstName + '' + Person.MiddleName + '' + Person.LastName) LIKE ('%Tom%')
        AND person.Company LIKE ('%Tom%'))
)
SELECT
    ClientId, PersonId, ClientCompanyId, ClientCategoryId,
    IsImported, IsModified, StatusId, ClientTypeId, LeadSourceId, 
    Company, FirstName, MiddleName, LastName, 
    AddressLine1, AddressLine2, AddressLine3, 
    City, [State], Country, Zip, 
    HomePhone, WorkPhone, CellPhone, Fax, EmailId, Website, 
    ClientStatusName, ClientCategoryName, ClientTypeName,
    LeadSourceId, LeadSourceName, Username, AddedBy, UserId
FROM 
    FilteredClient

现在我根据ClientName搜索(客户名称包括公司名称和人的名字)。两者在Person 表中都有单独的列。

我将文本放入文本框中,然后点击搜索,然后文本框的值同时出现在 company.person 和 person.firstname 中。

现在我希望搜索结果来自两列,但是如果在 companyname 中找到了一些匹配项,那么它会选择 companyname 和相关的人名,但是如果我将人名放在文本框中,那么如果公司列有 0 结果,那么它是没有亲自搜索名字

如果我的情况有任何错误,请告诉我

请帮帮我

【问题讨论】:

  • 合并? IE。 select coalesce(col1, col2, col3....) 将选择第一个非空列。

标签: c# sql sql-server sql-server-2008


【解决方案1】:

根据您的要求,您在 where 条件中使用 AND 子句是错误的。您应该使用 OR 子句而不是 AND,因此将您的查询替换为以下

AND ((Person.FirstName +''+Person.MiddleName +''+Person.LastName) like ('%Tom%')
OR person.Company like('%Tom%'))

【讨论】:

    【解决方案2】:

    看看这个答案。这可以帮助您调整算法并调整您的要求: This Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2021-05-16
      相关资源
      最近更新 更多