Можно ли в sql группировать по полям, соответствующим некоторому шаблону? - PullRequest
2 голосов
/ 28 июля 2010

Возможно ли в SQL группировать по LIKE шаблонам? Я хотел бы добиться чего-то вроде этого:

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

и затем выполняем запрос, как: SELECT name from users group by _pattern_
Например, я хотел бы получить группы, сопоставляя шаблоны 'B *', '* l *' и 'Mike' выдаст вывод:

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

Ответы [ 3 ]

1 голос
/ 28 июля 2010
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 голосов
/ 28 июля 2010

Вы можете запросить шаблоны в заданной структуре, а затем GROUP BY или DISTINCT, чтобы удалить дубли, ниже приведен способ с MSSQL CTE (временная таблица / таблица var также будет работать);

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    
0 голосов
/ 28 июля 2010

Если вы хотите, чтобы одна и та же запись появлялась несколько раз в соответствии с шаблоном, которому она соответствует, вы должны использовать несколько операторов SELECT с соответствующими фильтрами и UNION их вместе ..

...