Sql 按相似运算符分组

Sql 按相似运算符分组,sql,vba,ms-access,Sql,Vba,Ms Access,我在Access中有一个小数据库,里面有关于客户的信息 在这个数据库中,原始创建者指定了一个主键(我们称之为ID) 还有一个列(如您所猜测的)客户名称 在我正在编写的这份报告中,我基本上想要的是将相似的客户名称分组到一行中 例如,如果我有以下几组客户: 马来西亚 马来西亚航空公司 马来西亚管道 请注意,这些都是相同的客户,但ID不同(您可以假设,…ID是一个自动递增的字段…1,2,3) 我不确定这是否可行……或者我是否需要编写一些VBA来捕获它 有什么建议吗 这应该能奏效。这将消除该名称在表中某

我在Access中有一个小数据库,里面有关于客户的信息

在这个数据库中,原始创建者指定了一个主键(我们称之为
ID

还有一个列(如您所猜测的)客户名称

在我正在编写的这份报告中,我基本上想要的是将相似的客户名称分组到一行中

例如,如果我有以下几组客户:

马来西亚

马来西亚航空公司

马来西亚管道

请注意,这些都是相同的客户,但ID不同(您可以假设,…
ID
是一个自动递增的字段…1,2,3)

我不确定这是否可行……或者我是否需要编写一些VBA来捕获它


有什么建议吗

这应该能奏效。这将消除该名称在表中某个位置具有更简洁版本的所有行(即,存在另一个名称的行,该名称是被消除的名称的子字符串)。由于这是通过删除来实现的,所以我首先将所有内容都放在临时表中,以保护您的原始数据

select * into #tmp from your_table

delete t1
    from #tmp t1
    inner join #q t2 on t1.[name] like '%' + t2.[name] + '%' and t1.[name] <> t2.[name]

select * from #tmp
…或获取所有别名的简单列表,如下所示:

select t1.[name], count(*) - 1 as number_of_aliases, sum(t2.number_of_passengers) as number_of_passengers, avg(t2.avg_ticket_price) as avg_ticket_price
    from #tmp t1
    left join your_table t2 on t1.[name] like '%' + t2.[name] + '%'
    group by t1.[name]
    order by t1.[name]
select t1.[name], t2.[name]
    from #tmp t1
    left join your_table t2 on t1.[name] like '%' + t2.[name] + '%'
    order by t1.[name], t2.[name]

我希望这能有所帮助。

您需要更具体地说明什么是“相似”的同名…即。从逻辑上讲,马来西亚航空公司和马来西亚航空公司都被视为一个客户,但它们并不相同。是不是一个名字的全部可以包含在另一个名字中?@jwolf,是的,从技术上讲,它们是不一样的。但是,一个名称应该包含在另一个名称中。请参见:这不是Access SQL。它也不能满足OP的要求,即按相似的名称分组,而不能删除。@SunKnight0,同意。此语句不在SQL中运行,也不是我想要的。我会仔细看看你说的话,然后我会想办法。选择的答案不起作用。我不得不使用@SunKnight0的例子并添加一个
PrimaryID