You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询问题咨询:按项目统计工时的语句报错原因排查

你的SQL查询存在的问题及修复方案

核心问题拆解

  • 字段名不匹配:示例表中Project的项目编号字段是PNo,但你写的是Pnumber,数据库会找不到该列直接报错。
  • 子查询返回多行:你写的子查询(select sum(Hours) from Worksfor group by (Pno))会返回每个项目的总工时,属于多行结果,但标量子查询(作为列返回)只能返回单行,这会触发"子查询返回的值不止一个"的错误。
  • 表连接与分组缺失:用逗号连接Project和WorksFor且未分组,会生成笛卡尔积,导致每条工时记录都对应一条项目记录,结果会重复显示项目信息,总工时也无法正确计算。
  • 排序逻辑错误:你用w.Hours排序,这是单条工作记录的工时,不是项目的总工时,和需求要求的"按总工时排序"不符。

正确的查询写法

SELECT 
    p.PNo AS 项目编号,
    p.PName AS 项目名称,
    ISNULL(SUM(w.Hours), 0) AS 总工时
FROM 
    @Project p
LEFT JOIN 
    @WorksFor w ON p.PNo = w.PNo
GROUP BY 
    p.PNo, p.PName
ORDER BY 
    总工时 DESC; -- 可根据需求改为ASC升序

写法说明

  1. 用LEFT JOIN关联两张表,确保哪怕没有员工参与的项目也能被查询到(总工时显示0)。
  2. 通过GROUP BY p.PNo, p.PName按项目分组,用SUM(w.Hours)计算每个项目的总工时,ISNULL处理无工时的情况。
  3. 直接使用分组后的聚合字段总工时排序,符合需求。
  4. 字段名和示例表保持一致,避免列不存在的错误。

内容的提问来源于stack exchange,提问作者The Engineer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:20:34