我有下表:
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的一部分,那么每个项目我最终会得到多个不需要的条目。因此,这是一堆反复的尝试,但没有成功。请帮助,聪明的人!
答案 0 :(得分:0)
您可以尝试编写一个子查询,该子查询从Min(CompareID)
表然后MIN(AssetID)
中获得Comparisons
和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示例,但我认为它可以在访问中工作,
答案 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