首页 > 解决方案 > 连接表中最小值的显示名称

问题描述

我有以下表格:

      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

(Comparisons 和 Assets 实际上有额外的信息需要它们是单独的表,即使这个例子看起来我可以把它全部做成一个表。)

我有一个表单,其记录源是项目(意味着 3 个条目),我想包含一个字段,该字段提供与 ProjectID 的最低比较 ID 相对应的资产名称。像这样的东西:

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

在我的表单上,我已经将控制源列为 Projects.ProjectID 并将行源列为

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

我不知道如何合并资产。如果我将 Assets.AssetName 添加到 SELECT 行,那么我需要将此字段包含在命令的其他位置。如果它是 GROUP BY 的一部分,那么我最终每个项目都会有多个我不想要的条目。所以现在是一堆没有成功的试验和错误。请帮助,聪明的人!

标签: sqlms-access

解决方案


您可以尝试编写一个子查询 get Min(CompareID)and MIN(AssetID)from Comparisonstable then JOIN

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


推荐阅读