具有属性优先级的SQL查询

时间:2010-09-28 20:11:32

标签: sql linq-to-sql

你好 想象我有这样的表

Id | Name       | City
1  | Tom york   | xx
2  | Jim york   | xy
3  | tony       | new York
4  | Sam york   | xz

我希望搜索名称为'%york%'或像'%york%'这样的城市的记录 但是我想更优先考虑名字,所以我的结果会是这样的:

Id | Name       | City
1  | Tom york   | xx
2  | Jim york   | xy
4  | Sam york   | xz
3  | tony       | new York

即,首先是名称为'%york%'的记录,然后是像'%york%'这样的城市的记录

构建此查询的最佳方法是什么?我可以在一个查询中执行此操作吗? 回答sql或linq到sql会很棒

TKS

3 个答案:

答案 0 :(得分:3)

select *
from (
    select Id, Name, City, 1 as Rank
    from MyTable
    where Name like '%a%' 
    union all
    select Id, Name, City, 2 as Rank
    from MyTable
    where City like '%a%'
) a
order by Rank

答案 1 :(得分:3)

我想你的意思是“但我想更优先考虑名称”是你希望首先在"a" Name中获取"a"的实体,然后是其他实体(包括City中的Entities .Where(e => e.Name.Contains("a") || e.City.Contains("a")) .OrderByDescending(e => e.Name.Contains("a")); 。相应的Linq-to-SQL查询将是:

{{1}}

答案 2 :(得分:3)

Dan Dumitru解决方案的SQL版本将是:

SELECT Id, Name, City
FROM   cities
WHERE Name LIKE 'b%'
   OR City LIKE 'b%'
ORDER BY
   Name LIKE 'b%' DESC

使用一些示例数据:

Id | Name | City
1  | aa   | bb
2  | bb   | aa

这给出了:

Id  Name    City
2   bb      aa
1   aa      bb

SELECT Id, Name, City
FROM   cities
WHERE Name LIKE 'b%' 
   OR City LIKE 'b%'
ORDER BY
    Name, City

提供错误:

Id  Name  City
1   aa    bb
2   bb    aa

那是因为在第一个我们按哪个字段匹配排序,但在第二个我们按字段排序。