【问题标题】:How to condense duplicate records and take the predominant value for a data element?如何压缩重复记录并获取数据元素的主要值?
【发布时间】:2020-06-17 17:11:32
【问题描述】:

我在表格中有以下列:[PO Concatenate]、[Award]、[Material Group] 可以有多个条目具有相同的 [PO Concatenate],但我希望能够将条目压缩为一个条目,该条目由 [Award] SUM 和具有最大值的条目的 [Material Group] 组成。

例如:[PO Concatenate] "3140950_#" 应导致一行包含 [Material Group] "E006" 和 [Award] = "$489.7"

我尝试了交叉表查询,虽然这减少了重复次数和奖励总和,但它并没有抓住正确的材料组。我今天刚刚了解到,当我按奖项降序排序时,使用 First 函数优先考虑第一个字母数字项目而不是第一个值。我使用了一个标准字段 [FY/P]。

@Applecore 更新

TRANSFORM Sum([MG ETC].Award) AS SumOfAward
SELECT 
M.[PO Concatenate], 
Sum(M.Award) AS TotalAward,
(SELECT TOP 1 M1.[Material Group] FROM [MG ETC] AS M1 WHERE M1.[PO #]=M.[PO Concatenate] ORDER BY M1.Award DESC) AS TopGroup
FROM [MG ETC] AS M
GROUP BY M.[PO Concatenate]
PIVOT [MG ETC].[FY/P];

我正在尝试的内容是否可以在 Access 中实现?

【问题讨论】:

    标签: ms-access crosstab


    【解决方案1】:

    您可以使用子查询返回具有TOP 1 Award 值的材料组:

    SELECT M.[PO Concatenate], 
    Sum(M.Award) AS TotalAward, 
    (SELECT TOP 1 M1.[Material Group] FROM [MG ETC] AS M1 WHERE M1.[PO Concatenate]=M.[PO Concatenate] ORDER BY M1.Award DESC) AS TopGroup
    FROM [MG ETC] AS M
    GROUP BY M.[PO Concatenate];
    

    问候,

    【讨论】:

    • 我能够让这个查询在短时间内得到我想要的结果,但随后我收到错误“此子查询最多可以返回一条记录”。有任何想法吗? SELECT M.[PO Concatenate], Sum(M.SumofAward) AS TotalAward, (SELECT TOP 1 M1.[Material Group] FROM [MGETCpreMG] AS M1 WHERE M1.[PO Concatenate]=M.[PO Concatenate] ORDER BY M1 .SumofAward DESC) AS TopGroup FROM [MGETCpreMG] AS M GROUP BY M.[PO Concatenate];
    • 这适用于基于您的原始表的数据,但您现在似乎正在针对不同的查询(“MGETCpreMG”)运行它,我对此一无所知。
    • 嗨 Applecore,假设我回到原来的表/代码,即带有变换的表/代码。您能否帮助我构建该代码以包含您的子查询,因为我无法使其工作。如果可能的话,我要做的唯一改变就是将您对 [PO #] 的使用更改为 [PO Concatenate]?
    • 使用 [MG ETC] 在原始 SQL 中将 [PO #] 更改为 [PO Concatenate] 可以正常工作
    • 我将我的代码更新为我认为您帮助我的方向。但是,现在给我的错误是 M.[PO Concatenate] 不是有效的字段名称或表达式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多