【问题标题】:Multiple criteria MATCH/INDEX combination returns wrong row number多个条件 MATCH/INDEX 组合返回错误的行号
【发布时间】:2020-03-27 22:20:51
【问题描述】:

我已经为此苦苦挣扎了一天,找不到问题所在。

我正在为 SQL 导入重新创建一个表,因此我需要从表 1 创建一个唯一行列表以具有行结构。 我可以通过两列(ID_concept、ID_country)识别唯一行,然后按年份的行(ID_year - 顶行 7、8、9、10...44)找到唯一值。

源表如下所示:Source table

为了获取单行中的值,我创建了第二个表来使用多个索引/匹配组合,每行写入值。看起来像这样:Desired table for SQL import

在值列中,我使用以下 INDEX/MATCH 公式查找数据:

{=INDEX(Sheet1!$C$2:$AN$2813;MATCH(Sheet2!A2&Sheet2!B2;Sheet1!$A$2:$A$2813&Sheet1!$B$2:$B$2813;0);MATCH(Sheet2!C2;Sheet1!$C$1:$AN$1;0))}

当我在 Sheet2 中复制公式时,它会填充值列中的所有值字段,但某些值复制错误。 MATCH 函数中 ID_concept 和 ID_country 的组合应始终导致唯一的行。我已经单独检查了 MATCHES,并且列匹配总是很好。不幸的是,行匹配(使用 & 语句)在少数情况下会返回错误的行号(例如,32 而不是 395,输入值 11 和 41 并返回 1 和 140 的行)。

值范围: ID_concept:1-38ID_country:1-190年:7-44源表2812x38SQL 表 106 856 行

知道为什么多个条件 MATCH 返回错误的行信息吗?

谢谢

【问题讨论】:

  • 好吧,我最终将这些列硬拷贝到另一张纸上(浪费了 20 分钟,而编写了一项基本任务需要 1 天)。但仍然希望将来使用为什么 +/-2800 中的 99 行号显示错误。
  • 确保公式中的“相对地址”正在改变您在工作表中复制/填写公式时所需的方式。
  • 已检查,这是正确的。在非重复模式中,它会抛出一个完全不同的数字。所有数据的单元格格式也相同。
  • 您没有在问题中提供足够的信息,我无法重现您的问题。但只要你找到了解决办法...
  • 我将尝试在此处包含简化版的表格。

标签: excel indexing match criteria


【解决方案1】:

您可以使用Power Query在 Excel 2010 或更高版本中可用)在 Excel 中轻松创建输出表,而不是使用公式。

在 2016+ 中,转到数据选项卡并选择从表/范围中获取和转换。 在早期版本中,有一个 Microsoft 提供的免费插件可供安装。

那么这只是一个问题

  • 选择前两列
  • unpivot 其他列
  • 重命名生成的Attribute 列 --> ID_Period
    • 将此列的Type更改为Whole Number
  • 如果需要,可以通过依次选择第 3 列、第 2 列、第 1 列来对结果进行排序。

以上所有内容都可以通过 UI 完成,但这里是生成的 M-Code,您可以将其粘贴到高级编辑器中,只需稍作改动:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID_concept", Int64.Type}, {"ID_country", Int64.Type}, {"7", type number}, {"8", type number}, {"9", type number}, {"10", type number}, {"11", type number}, {"12", type number}, {"13", type number}, {"14", type number}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"ID_concept", "ID_country"}, "Attribute", "Value"),
    #"Renamed Columns" = Table.RenameColumns(#"Unpivoted Other Columns",{{"Attribute", "ID_Period"}}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Renamed Columns",{{"ID_Period", Int64.Type}}),
    #"Sorted Rows" = Table.Sort(#"Changed Type1",{{"ID_Period", Order.Ascending}, {"ID_country", Order.Ascending}})
in
    #"Sorted Rows"

【讨论】:

    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多