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

大卫·雷登(David Redden)

我有一些数据具有一对多的关系。以下是代表我的数据的虚拟数据。我有一个具有多个ALT_ID的ID。这些Alt_ID与称为Alt_Spec_Code的列有关系。我需要或希望有一个输出列,用一个Alt_Spec_Codes来填充ID_Spec_Code。

 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 / AN / A 
 987654 121212 / AN / A 
 987654 333333不适用
 456789 111111 PA BOTH 
 456789 444444 ST BOTH
 456789 555555不适用

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

汉素
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 ...

但基本上,策略是为每个ID计算CountOfALT_SPEC_CODEMinOfALT_SPEC_CODE然后,顶级表达式可以使用该信息来计算DESIRED_OUTCOMESwitch

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章