2010-09-28 2 views
4

Salut à imaginer que j'ai une table comme celui-cirequête SQL avec les priorités sur les attributs

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

et je voudrais rechercher des documents avec le nom comme « %% york » ou ville comme « %% york » Mais je veux donner une plus grande priorité au nom, donc mon rresult serait quelque chose comme:

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

qui est, d'abord les enregistrements où le nom comme « %% york », puis les dossiers où la ville comme « % york% '

quel est le meilleur moyen de construire cette requête? puis-je le faire dans une seule requête? réponses à sql ou LINQ to SQL serait génial

TKS

+0

Est-ce que '% a%' est la seule chaîne de recherche que vous devez utiliser, ou pourriez-vous utiliser une lettre différente, ou plus d'un caractère pour la correspondance? –

+0

ouais, c'était juste un eample, en réalité la table aurait de vrais noms ou des villes. – DJPB

Répondre

3

Je suppose que ce que vous entendez par « mais je veux donner une plus grande priorité au nom » est que vous voulez obtenir les entités "a" dans Name d'abord, puis les autres (avec "a" dans City). La requête LINQ to SQL respective serait:

Entities 
.Where(e => e.Name.Contains("a") || e.City.Contains("a")) 
.OrderByDescending(e => e.Name.Contains("a")); 
+0

tks dan, une seule chose, ajouté descendant à l'ordre par, mais cela semble faire l'affaire, – DJPB

+0

@martin - Vous avez raison, j'ai corrigé, il aurait dû être OrderByDescending au lieu de OrderBy là. –

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 
3

Une version SQL de la solution de Dan Dumitru serait:

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

Avec quelques exemples de données:

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

Cela donne:

Id Name City 
2 bb  aa 
1 aa  bb 

Bien que

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

Donne l'incorrect:

Id Name City 
1 aa bb 
2 bb aa 

C'est parce que dans le premier nous avons trié par quel champ correspond, mais dans la seconde nous avons trié par champ valeurs.

Questions connexes