我的数据库中有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
答案 0 :(得分:2)
您收到了错误
列在选择列表中无效,因为它不包含在任何一个中 聚合函数或GROUP BY子句SQL Server
这意味着存在分组结果,并且“group by”中未使用某些列。因此,您需要将表格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 ...
如果您删除分组依据,您将在结果查询中获得大量垃圾(来自洗礼,赞助商和子选择的所有列)
答案 1 :(得分:1)
这不是小组如何工作。您不能按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部分,则可能会很好。