我在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]
我希望这有帮助。