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_CODE 和 MinOfALT_SPEC_CODE编号。然后顶级 Switch
表达式可以使用该信息来计算 DESIRED_OUTCOME.
我有一些具有一对多关系的数据。下面是代表我的数据的虚拟数据。我有一个将有多个 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_CODE 和 MinOfALT_SPEC_CODE编号。然后顶级 Switch
表达式可以使用该信息来计算 DESIRED_OUTCOME.