1

我的数据库上有这 3 个表。我正在尝试将bId哪个 FK 分组到Baptism. BSponsors是洗礼赞助商的表格,因此bId如果我不打算对它进行分组,显然该列将在我的页面上重复显示。所以我尝试了下面的代码,但弹出错误说:

列在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句 SQL Server 中

SELECT p.pId, p.Lname, p.Fname, p.Mname, p.BirthDate, p.HomeAddress, 
    p.PlaceOfBirth,     p.Age, p.BirthDate, b.*, s.*,
(SELECT sp.Fname+' '+sp.Lname FROM Profile sp WHERE sp.pId=b.pId) AS child,
(SELECT sp.Fname+' '+sp.Lname FROM Profile sp WHERE sp.pId=b.fatherID) AS father,
(SELECT sp.Fname+' '+sp.Lname FROM Profile sp WHERE sp.pId=b.motherID) AS mother,
(SELECT sp.Fname+' '+sp.Lname FROM Profile sp WHERE sp.pId=b.guardianID) AS guardian,
(SELECT sp.Fname+' '+sp.Lname FROM Profile sp WHERE sp.pId=b.revID) AS rev,
(SELECT sp.Fname+' '+sp.Lname FROM Profile sp WHERE sp.pId=s.pId) AS sponsors
FROM Baptism b
INNER JOIN Profile p
ON p.pId=b.pId
INNER JOIN BSponsors s
ON b.bId = s.bId
GROUP BY s.bId
4

2 回答 2

2

你得到了错误

列在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句 SQL Server 中

这意味着有分组结果,并且“分组依据”中未使用某些列。因此,您需要将列和表 Baptism 和 BSponsors 中的所有列添加到组中:

GROUP BY p.pId, p.Lname, p.Fname, p.Mname, p.BirthDate, p.HomeAddress, p.PlaceOfBirth, p.Age, p.BirthDate, b.pId, s.pId ...

如果你删除 group by,你会在结果查询中得到很多垃圾(来自 baptism、sponsors 和 sub-selects 的所有列)

于 2013-06-18T07:55:51.357 回答
1

这不是 group by 的工作方式。您不能按 columnA 分组,然后在 select 语句中有 columnB、columnC、columnD。

这里有几篇很好的文章,可以为你指明正确的方向

http://www.w3schools.com/sql/sql_groupby.asp

http://www.sql-tutorial.net/SQL-GROUP-BY.asp

http://www.sqlteam.com/article/how-to-use-group-by-in-sql-server

在您的特定情况下,如果您只删除 GROUP BY 部分,您可能会做得很好,因为您没有使用任何聚合函数。

于 2013-06-18T09:45:36.797 回答