TSQL带和的内部选择

TSQL带和的内部选择,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我试图在我的内部select中获取2个值的总和,但得到了一个有关聚合函数的错误 我只是想了解我需要如何用不同的格式来让它工作 我需要按不同的顺序来做这件事吗 (SELECT CONVERT(VARCHAR,D.[booksCost],1) AS booksCost, CONVERT(VARCHAR,D.[tuitionCost],1) AS tuitionCost, SUM (D.[booksCost] + D.[tuitionCost]) A

我试图在我的内部select中获取2个值的总和,但得到了一个有关聚合函数的错误

我只是想了解我需要如何用不同的格式来让它工作

我需要按不同的顺序来做这件事吗

 (SELECT   CONVERT(VARCHAR,D.[booksCost],1) AS booksCost, 
           CONVERT(VARCHAR,D.[tuitionCost],1) AS tuitionCost,
           SUM (D.[booksCost] + D.[tuitionCost]) AS totalCost,
           D.[className]
  FROM   tuitionApplicationClasses AS D
  WHERE  applicationID = A.[applicationID]
  FOR    XML PATH ('classData'), TYPE, ELEMENTS),


Column 'tuitionApplicationClasses.booksCost' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

尝试通过..使用总和超额分配

(SELECT   CONVERT(VARCHAR,D.[booksCost],1) AS booksCost, 
           CONVERT(VARCHAR,D.[tuitionCost],1) AS tuitionCost,
           SUM (D.[booksCost] + D.[tuitionCost]) OVER (PARTITON BY applicationID) AS totalCost,
           D.[className]
  FROM   tuitionApplicationClasses AS D
  WHERE  applicationID = A.[applicationID]
  FOR    XML PATH ('classData'), TYPE, ELEMENTS),
是应用于查询中指定列的聚合函数。您试图做的只是在每行中添加前两列,因此需要修改查询以删除SUM关键字


不对字段执行操作时,必须将其包含在GROUP BY语句中,该语句包含操作函数中未使用的其他字段。

不能在单个查询中求和然后选择单个列-这是因为求和本质上是将所有行分组到单个组中,并对其运行聚合。您可以使用相关子查询来执行此操作-从TutionApplicationClasses中选择SUMbooksCost+TutionCost,其中applicationID=a.applicationID作为totalCost,而不是原始总和-我不确定a在查询中的别名位置,我看不到,所以上面的说法可能不正确……唯一的问题是我试图得到这两个值的总和,因为select中有多行。可能有10个结果,我需要通过将学费+书本加在一起得到每行课程的总数。因此,它不仅仅是整个应用程序的总和,而是内部select中的每一行。您尝试过我在评论中提出的建议了吗?它被称为关联子查询,因为它使用外部查询中的字段,并在每个外部行运行一次,例如,每行运行一次,它将根据应用程序ID计算书本和学费的总和,假设这是唯一的键I,对于所有返回的10条记录,它给了我相同的总数,其中每个记录都应该有自己的总数,几乎就是这样-您需要确保通过使内部子查询唯一的方式将外部查询与内部子查询关联起来-当然,除非您真的不想要聚合-您尝试过不求和吗i、 你是想把每行的书费和学费加起来,还是想在一组书中加上一个总数?这是可行的,出于某种原因,我认为在一个查询中做加法需要求和——很简单:我忽略了最明显的解释!
(SELECT   CONVERT(VARCHAR,D.[booksCost],1) AS booksCost, 
       CONVERT(VARCHAR,D.[tuitionCost],1) AS tuitionCost,
       (D.[booksCost] + D.[tuitionCost]) AS totalCost,
       D.[className]
FROM   tuitionApplicationClasses AS D
WHERE  applicationID = A.[applicationID]
FOR    XML PATH ('classData'), TYPE, ELEMENTS),