MS ACCESS 或 Excel 公式或代码以生成所需的输出列

MS ACCESS or Excel formula or code to result in desired output column

我有一些具有一对多关系的数据。下面是代表我的数据的虚拟数据。我有一个将有多个 ALT_IDs 的 ID。那些 Alt_IDs 与名为 Alt_Spec_Code 的列有关系。我需要或想要一个输出列,让我们说 ID_Spec_Code 只有一个 Alt_Spec_Codes.

 ID          ALT_ID          ALT_SPEC_CODE          DESIRED_OUTCOME(ID_SPEC_CODE)
 123456      111111          PA                     PA
 123456      222222          N/A                    PA
 123456      121212          N/A                    PA
 654321      333333          N/A                    ST
 654321      444444          ST                     ST
 654321      434343          N/A                    ST
 987654      222222          N/A                    N/A
 987654      121212          N/A                    N/A
 987654      333333          N/A                    N/A
 456789      111111          PA                     BOTH
 456789      444444          ST                     BOTH
 456789      555555          N/A                    BOTH

我在想我什至可以做一个更新语句来更新 Desired_Outcome 字段,使用 Max 或什至 doa row_number 类型查询来对 Alt_Spec_Code 进行排名,然后更新 Desired_Outcome 字段与它找到的第一个值。但是后来我不确定如何处理可能是两者的最后一种情况。

SELECT
    y2.ID,
    y2.ALT_ID,
    y2.ALT_SPEC_CODE,
    Switch
        (
            CountOfALT_SPEC_CODE Is Null, 'N/A',
            sub2.CountOfALT_SPEC_CODE = 2, 'Both',
            sub2.CountOfALT_SPEC_CODE = 1, sub2.MinOfALT_SPEC_CODE
        ) AS DESIRED_OUTCOME
FROM
    YourTable AS y2
    LEFT JOIN
        (
            SELECT
                sub1.ID,
                Count(sub1.ALT_SPEC_CODE) AS CountOfALT_SPEC_CODE,
                Min(sub1.ALT_SPEC_CODE) AS MinOfALT_SPEC_CODE
            FROM
                (
                    SELECT DISTINCT y1.ID, y1.ALT_SPEC_CODE
                    FROM YourTable AS y1
                    WHERE y1.ALT_SPEC_CODE<>'N/A'
                ) AS sub1
            GROUP BY sub1.ID
        ) AS sub2
    ON y2.ID = sub2.ID;

我不知道如何连贯地解释它。您可以通过将每个子查询分解为一个新的 Access 查询来弄清楚它是如何工作的,从最低级别开始,SELECT DISTINCT ...

但基本上策略是为每个 计算 CountOfALT_SPEC_CODEMinOfALT_SPEC_CODE编号。然后顶级 Switch 表达式可以使用该信息来计算 DESIRED_OUTCOME.