Power Query合并双表:CASE与WHERE用法及替代方案咨询
解决Power Query中按指定供应源合并表的问题
原SQL语句的问题
你写的SQL存在两处关键错误:
- CASE语法错误:正确的CASE结构应为
CASE WHEN 条件 THEN 结果 ELSE 结果 END,你混淆了两种CASE写法,导致逻辑无法执行。 - 未关联零件列表且未筛选目标SOS1:语句没有关联Excel中的零件列表,也没有筛选出符合对应SOS1的记录,无法得到你需要的匹配结果。
方案一:先通过SQL筛选数据库数据,再导入Power Query合并
修改SQL语句,直接从数据库中筛选出符合条件的记录,再导入Power Query与Excel表合并:
USE LIBCOM500 SELECT p.pano20 AS [Part Number], p.sos1, p.uncs FROM pcpprms0 p -- 关联Excel中的零件列表(如果是通过Power Query调用,可替换为实际的表或参数) INNER JOIN ( SELECT [Part Number] FROM [你的Excel表名] ) e ON p.pano20 = e.[Part Number] WHERE -- 指定零件匹配SOS1=530,其余匹配SOS1=000 (p.pano20 IN ('ca2','oa1','oa1p') AND p.sos1 = '530') OR (p.pano20 NOT IN ('ca2','oa1','oa1p') AND p.sos1 = '000')
将上述查询结果导入Power Query后,直接与Excel表按Part Number做合并查询,选择需要的字段即可得到目标输出。
方案二:直接在Power Query中处理两个表
如果不想修改SQL,可以直接在Power Query内完成筛选与合并:
- 导入两个表:将Excel零件表(Table1)和数据库表(Table2)导入Power Query。
- 添加目标SOS1列:
- 选中Table2,点击「添加列」→「条件列」
- 设置规则:
- 条件:
[Part Number] 属于 {'ca2','oa1','oa1p'},结果:"530" - 否则结果:
"000"
- 条件:
- 将新列命名为
Target SOS1
- 筛选符合条件的行:筛选Table2中
[SOS1] = [Target SOS1]的记录。 - 合并表:将处理后的Table2与Table1按
Part Number合并,展开需要的字段(SOS1、uncs、Qty Needed)。 - 整理输出:删除多余列,调整列顺序,得到最终结果。
示例验证
按上述方法处理后,会得到你期望的输出:
| Part Number | SOS1 | uncs | Qty Needed |
|---|---|---|---|
| 123 | 530 | 2.50 | 1 |
| 222 | 000 | 3.00 | 3 |
内容的提问来源于stack exchange,提问作者lberecek
相关产品推荐
相关产品推荐

