我有一个Access数据库,其中包含一个包含以下字段的表: Drug_Code,Drug_Label,Alt_Drug_Code,Alt_Drug_Label,Strength,Alt_Drug_Code_10
我需要执行一个查询,该查询根据Alt_Drug_Code_10得到最大(强度),但随后返回所有其他字段。 我遇到的问题是Alt_Drug_Code在Alt_Drug_code_10中有多个代码,在Alt_Drug_Label中也有多个标签。
我以为我可以在订单上做第一个;但这似乎并没有让我得到我需要的东西。这是表格的样子。
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(强度)= 5 对于AltDrug2,这是好的/正确的。 对于AltDrug3,它会变得更复杂一些。我只希望看到最后一行有Max(强度)= 200;它选择哪个Alt_Drug_Label并不重要,可能是第一个,最后一个;只要它是Max(强度)= 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
答案 0 :(得分:0)
在这种情况下,生成一个由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
答案 1 :(得分:0)
我相信这可以在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
我刚刚在#34; ms访问标量子查询中搜索了一些网页"并且无法在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
)