sql - 嵌套查询出错

标签 sql sql-server database

我正在尝试在我的网站上开发一个时间表页面,这是我的数据库结构: enter image description here

我想获得总小时数(TimeSheetWeeks 表的总和(timeFrom-timeTo))、总费用(TimeSheetWeeks 表的总金额)和总计(TimSheetWeeks 表的总金额+ compAllow 表的总金额)。

这是我为获得结果而编写的查询:

 ;WITH w(tot, tid, eid, fd, td, am, mw) AS
 (
 SELECT   Total = tsw.amount+ca.amount , tsw.[TimeSheetID], [EmployeeID], 
 [FromDate],[ToDate],  tsw.[Amount], SUM(DATEDIFF(MINUTE, [timeFrom],[timeTo] )) 
 FROM
 TimeSheet ts 
 INNER JOIN (
  SELECT  SUM(amount) amount, TimeSheetID 
  FROM TimeSheetWeeks
  GROUP BY TimeSheetID
  )  tsw ON ts.TimeSheetID = tsw.TimeSheetID INNER JOIN (
  SELECT  SUM(amount) amount, TimeSheetID
  FROM CompAllow
  GROUP BY TimeSheetID
  )  ca ON ts.TimeSheetID = ca.TimeSheetID INNER JOIN (
     SELECT  timeFrom, timeTo, TimeSheetID
  FROM TimeSheetWeeks
  ) AS tss ON tss.TimeSheetID=ts.TimeSheetID
  WHERE ts.TimeSheetID=6
  Group By tsw.[TimeSheetID], [EmployeeID], [FromDate], [ToDate], tsw.[Amount]
  )
  SELECT tot, tid, eid, fd, td, Amount = am,  totalHrs = RTRIM(mw/60) + ':' + 
  RIGHT('0'+ RTRIM(mw%60),2)
  FROM w;

这个查询导致错误提示

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

这里出了什么问题?提前谢谢。

最佳答案

ca.amount 列在 w CTE 中被引用,但既不聚合也不包含在 GROUP BY 子句中:

 ;WITH w(tot, tid, eid, fd, td, am, mw) AS
 (
 SELECT   Total = tsw.amount+<b><i>ca.amount</i></b> , tsw.[TimeSheetID], [EmployeeID], 
 [FromDate],[ToDate],  tsw.[Amount], SUM(DATEDIFF(MINUTE, [timeFrom],[timeTo] )) 
 FROM
 TimeSheet ts 
 INNER JOIN (
  SELECT  SUM(amount) amount, TimeSheetID 
  FROM TimeSheetWeeks
  GROUP BY TimeSheetID
  )  tsw ON ts.TimeSheetID = tsw.TimeSheetID INNER JOIN (
  SELECT  SUM(amount) amount, TimeSheetID
  FROM CompAllow
  GROUP BY TimeSheetID
  )  ca ON ts.TimeSheetID = ca.TimeSheetID INNER JOIN (
     SELECT  timeFrom, timeTo, TimeSheetID
  FROM TimeSheetWeeks
  ) AS tss ON tss.TimeSheetID=ts.TimeSheetID
  WHERE ts.TimeSheetID=6
  <b>Group By tsw.[TimeSheetID], [EmployeeID], [FromDate], [ToDate], tsw.[Amount]</b>
  )
  SELECT tot, tid, eid, fd, td, Amount = am,  totalHrs = RTRIM(mw/60) + ':' + 
  RIGHT('0'+ RTRIM(mw%60),2)
  FROM w;

将其添加到 GROUP BY 或像这样更改 Total 表达式:

Total = tsw.amount + SUM(ca.amount)

取决于此查询的业务规则是什么。

关于sql - 嵌套查询出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9755187/

相关文章:

sql - 棘手的 SQL SELECT 语句

mysql - 划分 COUNT 列时的 CAST 函数

sql-server - 经典 ASP + TSQL : DateTime Format Issue

sql - 在 Sequelize 中使每个用户 ID 的字段唯一?

数据库 vs 平面文件,对于 "regex"匹配许多同时请求,这是一种更快的结构

MySQL 存储过程查找最接近匹配的电话通话费率

sql - 按各种属性比较两个大表 - PostgreSQL

php - Laravel 中是否可以将 MS-SQL 连接到 MySQL

sql-server - SQL Server 将列中的所有数字递增 1

sql - 在 SQL 中归档数据