MS ACCESS - 最大(强度)分组问题

MS ACCESS - Max (Strength) grouping issue

我有一个 Access 数据库,其中 table 具有以下字段: Drug_Code, Drug_Label, Alt_Drug_Code, Alt_Drug_Label, 强度, Alt_Drug_Code_10

我需要执行查询以根据 Alt_Drug_Code_10 获取最大(强度),然后 return 所有其他字段。 我遇到的问题是 Alt_Drug_Code 在 Alt_Drug_code_10 中有多个代码,在 Alt_Drug_Label.

中也有多个标签

我想我可以先做一个订单;但这似乎并没有让我得到我需要的东西。这是 table 的样子。

 Drug_Code         Drug_Label     Alt_Drug_Code    Alt_Drug_Label  Strength   Alt_Drug_Code_10 
12345678912345 Drug1 54321987654321 AltDrug1 1 5432198765
12345678912345 Drug1 54321987654341 AltDrug1 5 5432198765
12345678912345 Drug1 98765432101234 AltDrug2 50 9876543210
12345678912345 Drug1 54545454540002 AltDrug3 50 5454545454
12345678912345 Drug1 54545454540001 AltDrug3 100 5454545454
12345678912345 Drug1 54545454540003 AltDrug3 150 5454545454
12345678912345 Drug1 54545454540004 AltDrug3 200 5454545454
12345678912345 Drug1 54545454540004 AltDrug3 E2 200 5454545454
12345678912345 Drug1 54545454540004 AltDrug3 E3 200 5454545454

所以对于 AltDrug1,我只希望在我的结果中看到 1 行 Max(Strength) = 5 对于 AltDrug2,它是 good/correct。 对于 AltDrug3,它变得有点复杂。我只想在最后看到 1 行 Max(Strength) = 200 ;它选择哪个 Alt_Drug_Label 并不重要,可以是第一个,最后一个;只要它是 Max(Strength) = 200.

到目前为止,这是我的查询:
SELECT DL.DRUG_CODE, DL.DRUG_LABEL, DL.ALT_DRUG_CODE, DL.ALT_DRUG_LABEL, MAX(DL.STRENGTH), DL.ALT_DRUG_CODE_10 FROM DRUG_LIST DL GROUP BY DL.DRUG_CODE, DL.DRUG_LABEL, DL.ALT_DRUG_CODE, DL.ALT_DRUG_LABEL

在这种情况下,生成按 drug_code_10 分组的药物子集并返回最大值,然后重新连接到您的超集数据似乎可以完成工作...

SELECT DL.DRUG_CODE, DL.DRUG_LABEL, DL.ALT_DRUG_CODE, 
       max(DL.ALT_DRUG_LABEL), DL.STRENGTH, DL.ALT_DRUG_CODE_10 
FROM DRUG_LIST DL
INNER JOIN (
    SELECT max(DL.Strength) mStr, alt_drug_Code_10 
    FROM drug_list 
    GROUP BY alt_drug_Code_10) B
 on DL.Strength = B.mStr and B.Alt_Drug_code_10 = Dl.Alt_drug_Code_10
GROUP BY DL.DRUG_CODE, DL.ALT_DRUG_CODE, DL.ALT_DRUG_LABEL, dl.strength

我相信这将适用于更高版本的 Access,但我不完全确定:

SELECT
    DL.DRUG_CODE, DL.DRUG_LABEL, DL.ALT_DRUG_CODE, DL.ALT_DRUG_LABEL,
    DL.ALT_DRUG_CODE_10,
    (
        SELECT MAX(DL.STRENGTH)
        FROM DRUG_LIST DL2
        WHERE DL2.ALT_DRUG_CODE_10 = DL.ALT_DRUG_CODE_10
    ) MAX_STRENGTH
FROM DRUG_LIST DL
GROUP BY
    DL.DRUG_CODE, DL.DRUG_LABEL, DL.ALT_DRUG_CODE, DL.ALT_DRUG_LABEL

我刚刚在 "ms access scalar subquery" 上进行了一些网络搜索,但在 select 子句中找不到任何子查询示例。我确实发现了一个带有方括号的子查询的奇怪符号,并以我完全不熟悉的句点终止。

编辑: 在阅读了您对 xQbert 的回答的评论后,我认为这可能就是您所追求的。

SELECT *
FROM DRUG_LIST DL
WHERE STRENGTH = (
    SELECT MAX(STRENGTH)
    FROM DRUG_LIST DL2
    WHERE DL2.ALT_DRUG_CODE_10 = DL.ALT_DRUG_CODE_10
)