我有一些数据具有一对多的关系。以下是代表我的数据的虚拟数据。我有一个具有多个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_CODE和MinOfALT_SPEC_CODE。然后,顶级表达式可以使用该信息来计算DESIRED_OUTCOME。Switch
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句