如何用SQL按特定ID顺序查询Excel数据表并在Report页展示价格
嘿,这个需求我之前帮好几个同事处理过,刚好有几个实用的方案,分情况给你唠唠:
方法1:用Excel函数快速实现(适合简单场景)
如果你的Excel是365/2021及以上版本,XLOOKUP绝对是首选,简单还能适配动态行数:
- 假设
Report工作表的A列是你要按顺序排列的特定ID,那在B2单元格输入公式:=XLOOKUP(A2, DataBase!$A:$A, DataBase!$C:$C, "无数据", 0) - 按回车后下拉填充就行。这里用整列
$A:$A和$C:$C的原因是,不管DataBase里新增多少行,公式都会自动覆盖到新数据,不用手动调整范围。
要是你用的是旧版Excel(没有XLOOKUP),那VLOOKUP也能搞定:
- B2单元格公式:
=IFERROR(VLOOKUP(A2, DataBase!$A:$C, 3, FALSE), "无数据") - 解释下:
IFERROR是用来处理找不到对应ID的情况,返回“无数据”;3代表取DataBase里第三列的Price;FALSE是精确匹配ID。
方法2:Power Query(适合动态数据+频繁更新)
如果DataBase里的行数经常变,而且你需要频繁更新Report的数据,Power Query绝对是省心神器,一次设置长期受用:
- 第一步:切换到
DataBase工作表,随便选中一个数据单元格,点击顶部「数据」选项卡,选「从表格/区域」,记得勾选「我的表格有标题」,进入Power Query编辑器。 - 第二步:看到加载好的数据表后,直接点「关闭并上载至」,选择「仅创建连接」,再勾选「加载到工作表时刷新数据」——这一步是关键,以后新增数据不用再重新导入。
- 第三步:切回
Report工作表,假设A列是你的特定ID列表,选中B2单元格,点「数据」-「合并查询」-「合并查询作为新列」:- 上方选当前Report的A列数据,下方选刚才创建的DataBase连接,匹配列都选ID,连接类型选「左外部」(这样ID不存在也会显示空,不会丢数据)。
- 确定后新列会显示DataBase的记录,点列标题旁的小箭头展开,只勾选Price列就行。
- 以后只要
DataBase新增了行,在Report里点「数据」-「全部刷新」,Price数据就自动同步了,完全不用手动改公式!
方法3:用Excel内置SQL查询(适合熟悉SQL的用户)
要是你平时习惯写SQL,那用Excel自带的Microsoft Query来实现也很顺手:
- 点击「数据」-「获取数据」-「自其他来源」-「自Microsoft Query」,选择你的Excel文件当数据源,然后选中
DataBase表。 - 在查询编辑器里,你可以直接写SQL语句,比如你要按101、103、105的顺序展示Price,就写:
(这里用CASE代替FIELD,因为有些版本的Excel SQL不支持FIELD函数,兼容性更好)SELECT t.ID, t.Price FROM DataBase t WHERE t.ID IN (101, 103, 105) ORDER BY CASE t.ID WHEN 101 THEN 1 WHEN 103 THEN 2 WHEN 105 THEN 3 END - 执行查询后,把结果加载到Report工作表就行,后续刷新数据也能同步
DataBase的动态行变化。
内容的提问来源于stack exchange,提问作者Rascio
相关产品推荐
相关产品推荐

