You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerQuery中SQL查询结果与原始SKU列表排序不符的解决咨询

按原始SKU列表顺序排序SQL查询结果

可以实现,核心思路是先记录原始SKU的顺序,再将SQL查询结果与原始列表关联后按记录的顺序排序——因为SQL的IN语句不会保证返回结果的顺序和IN列表一致,必须手动维护原始顺序。

修改后的M代码

let
    // 读取原始SKU列表,添加索引列记录原始顺序
    Source = Excel.CurrentWorkbook(){[Name="SKU"]}[Content],
    AddOriginalOrder = Table.AddIndexColumn(Source, "OriginalOrder", 0, 1, Int64.Type),
    // 生成SQL查询用的SKU字符串(这部分逻辑保留原代码)
    Column1 = AddOriginalOrder[Column1],
    values = List.Transform(Column1, each Text.From(_)),
    valuesText = Text.Combine(values, "','"),
    query = "SELECT ITEMNO, [DESC] AS DESCRIPTION FROM DimItem_R WHERE ITEMNO IN ('" & valuesText & "')",
    target = Sql.Database("XXXXX", "XXXXX", [Query=query]),
    // 将原始带顺序的列表与SQL结果关联
    MergeWithSQLResult = Table.NestedJoin(AddOriginalOrder, {"Column1"}, target, {"ITEMNO"}, "SQLData", JoinKind.LeftOuter),
    // 展开SQL返回的描述信息
    ExpandDescription = Table.ExpandTableColumn(MergeWithSQLResult, "SQLData", {"DESCRIPTION"}, {"DESCRIPTION"}),
    // 按原始顺序索引排序
    SortByOriginalOrder = Table.Sort(ExpandDescription,{{"OriginalOrder", Order.Ascending}}),
    // 清理冗余列,调整最终列结构
    CleanUpColumns = Table.RemoveColumns(SortByOriginalOrder,{"OriginalOrder", "Column1"}),
    FinalTable = Table.ReorderColumns(CleanUpColumns,{"ITEMNO", "DESCRIPTION"})
in
    FinalTable

关键逻辑说明

  • 添加索引列:Table.AddIndexColumn给原始SKU列表加上递增序号,这个序号就是原始顺序的唯一标记。
  • 表关联:通过Table.NestedJoin把原始列表和SQL结果用SKU关联,确保每个原始SKU都能匹配到对应的描述。
  • 按索引排序:Table.Sort依据OriginalOrder列排序,就能完全恢复Excel里SKU的原始顺序。
  • 清理列:最后移除索引列,调整列顺序,得到符合需求的结果。

如果你的SKU列实际名称不是Column1,记得替换代码中对应的字段名。

内容的提问来源于stack exchange,提问作者ColinA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 07:37:14