列在选择列表中无效,因为它不包含在聚合函数中

时间:2013-06-18 05:34:05

标签: sql-server

我的数据库中有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

2 个答案:

答案 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部分,则可能会很好。