在联接表中显示最小值的名称

时间:2018-09-28 17:05:08

标签: sql ms-access

我有下表:

spring-boot-starter-logging

(比较和资产实际上具有其他信息,因此即使此示例使我看起来都可以将其全部放在一个表中,所以也必须使它们成为单独的表。)

我有一个表单,其记录源是Projects(意味着3个条目),并且我想包括一个字段,该字段提供与对应于ProjectID的最低CompareID的AssetName。像这样:

      Projects                    Comparisons                Assets
ProjectID ProjectName    CompareID ProjectID AssetID    AssetID AssetName
    1          A           101        1       201         201      ZZZ
    2          B           102        1       202         202      YYY
    3          C           103        2       203         203      XXX
                           104        3       204         204      WWW
                           105        1       205         205      VVV
                           106        2       206         206      UUU
                           107        1       207         207      TTT

在表单上,​​我将控制源列为Projects.ProjectID,将行源列为

ProjectName:  A    (Lowest CompareID is 101)    AssetName:  ZZZ
ProjectName:  B    (Lowest CompareID is 103)    AssetName:  XXX
ProjectName:  C    (Lowest CompareID is 104)    AssetName:  WWW

我不知道如何合并资产。如果将Assets.AssetName添加到SELECT行,则需要在命令中的其他位置包含此字段。如果它是GROUP BY的一部分,那么每个项目我最终会得到多个不需要的条目。因此,这是一堆反复的尝试,但没有成功。请帮助,聪明的人!

3 个答案:

答案 0 :(得分:0)

您可以尝试编写一个子查询,该子查询从Min(CompareID)表然后MIN(AssetID)中获得ComparisonsJOIN

SELECT Projects.ProjectName, 
       CompareIDMin,
       Assets.AssetName
FROM (
   select ProjectID,Min(CompareID) AS CompareIDMin,MIN(AssetID) AS AssetIDMin
   FROM Comparisons
   GROUP BY ProjectID
) as c
INNER JOIN Projects ON c.ProjectID = Projects.ProjectID
INNER JOIN Assets ON Assets.AssetID = c.AssetIDMin

这是一个sql-server示例,但我认为它可以在访问中工作,

SQLFIDDLE

答案 1 :(得分:0)

您尝试过吗?除了加入之外,您还可以将其用作WHERE子句中的子查询,这可能是更好的选择。

SELECT C.ProjectID, C.CompareID, C.AssetID
FROM Comparisons C 
JOIN (SELECT ProjectID, Min(CompareID) as CompareID FROM Comparisons GROUP BY ProjectID) S
ON C.ProjectID = S.ProjectID and C.CompareID = S.CompareID

答案 2 :(得分:0)

使用Min在一个字符串上解决了这个问题,我不知道是不可能的。

SELECT Projects.ProjectID, Min(Comparisons.CompareID), Min(Assets.AssetName)
FROM Assets INNER JOIN (Comparisons INNER JOIN Projects ON Comparisons.ProjectID = Projects.ProjectID) ON Assets.AssetID = Comparisons.AssetID
GROUP BY Projects.ProjectID