LIKE运营商分组

问题描述 投票:1回答:1

我在Access中有一个小型数据库,其中包含有关客户的信息。

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

还有一栏(正如您所猜测的)客户名称。

在我正在处理的这份报告中,我基本上想要的是将类似的客户名称分成一行。

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

马来西亚

马航

马来西亚管道

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

我不确定这是否可行......或者如果我必须写一些VBA来捕获它。

有什么建议?

sql vba ms-access
1个回答
-1
投票

这应该可以解决问题。这将消除名称在表格中某处具有更简洁版本的所有行(即,存在另一个名称,即要删除的名称的子字符串)。由于这是删除工作,我首先将所有内容放在临时表中以保护您的原始数据。

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]

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.