2010-07-28 3 views
1

Est-il possible en SQL de faire du groupage par LIKE patterns? Je voudrais réaliser quelque chose comme ceci:Est-il possible en sql de grouper par champs correspondant à un motif?

id|name 
1 | Mike 
2 | Bob 
3 | Bill 
4 | Alice 

et puis en faisant requête comme: SELECT name from users group by _pattern_
Par exemple, je voudrais obtenir des groupes par des motifs correspondant de B de * ', « * l * » et « Mike » donnerait la sortie:

 
B* | Bob 
    | Bill 
*l* | Bill 
    | Alice 
Mike| Mike 
+0

Merci pour toutes les réponses. – wlk

Répondre

1
Select 'B*' as Mask, Name 
from Table 
WHERE Name like 'B%' 
UNION ALL 
Select '*l*' as Mask, Name 
from Table 
WHERE Name like '%l%' 
UNION ALL 
Select 'Mike' as Mask, Name 
from Table 
WHERE Name like 'Mike' 
0

Si vous voulez le même enregistrement apparaisse plusieurs fois selon le modèle qu'il correspond, vous devez utiliser plusieurs déclarations SELECT avec les filtres appropriés et 012

0

Vous pouvez interroger les modèles dans une structure d'ensemble puis GROUP BY ou DISTINCT pour supprimer des dups, ci-dessous est un moyen avec un MSSQL CTE (table temporaire/table var fonctionnerait également);

with match (pattern) as (
      select 'B%' 
    union select '%l%' 
    union select 'Mike' 
) 
select 
    pattern, 
    name 
from TABLE, match where TABLE.name like match.pattern 
group by pattern, name 

== 
%l%  Alice 
%l%  Bill 
B%  Bill 
B%  Bob 
Mike Mike  
Questions connexes