【发布时间】:2010-07-28 10:49:05
【问题描述】:
SQL 中是否可以按LIKE 模式进行分组?我想实现这样的目标:
id|名称 1 |麦克风 2 |鲍勃 3 |账单 4 |爱丽丝
然后进行如下查询:SELECT name from users group by _pattern_
例如,我想通过匹配模式 'B*'、'*l*' 和 'Mike' 来获取组
会给出输出:
【问题讨论】:
SQL 中是否可以按LIKE 模式进行分组?我想实现这样的目标:
id|名称 1 |麦克风 2 |鲍勃 3 |账单 4 |爱丽丝
然后进行如下查询:SELECT name from users group by _pattern_
例如,我想通过匹配模式 'B*'、'*l*' 和 'Mike' 来获取组
会给出输出:
【问题讨论】:
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'
【讨论】:
如果您希望同一条记录根据其匹配的模式多次出现,您应该使用多个带有相关过滤器的SELECT 语句和UNION 一起使用..
【讨论】:
您可以查询集合结构中的模式,然后使用 GROUP BY 或 DISTINCT 来删除重复数据,下面是 MSSQL CTE 的一种方式(临时表/表变量也可以);
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
【讨论】: