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

使用Northwind数据库查询企业年度销售额的SQL代码运行失败求助

SQL 问题排查与修正方案

原代码存在的问题

  • 标识符引用兼容性差:带空格的表名Order Details使用双引号包裹的写法适配性低,SQL Server默认需开启QUOTED_IDENTIFIER参数才能识别双引号作为标识符包裹符,Access版本的Northwind则要求用方括号[]包裹带空格的标识符。
  • 别名冲突:年份字段别名year是SQL保留关键字,直接使用易触发语法报错。
  • 需求匹配缺失:需求要求统计各企业的年度销售额,原代码未关联客户表、也未按企业维度分组,输出结果为全平台年度总销售额,不符合需求。
  • 分组逻辑兼容问题:部分旧版本数据库不支持在GROUP BY子句中直接复用SELECT层的函数表达式,易触发分组不匹配报错。

修正后可运行代码(适配Northwind默认的SQL Server/Access环境)

按年份+企业维度统计(匹配需求)

SELECT 
    YEAR(o.OrderDate) AS order_year,
    c.CompanyName AS enterprise_name,
    SUM(od.UnitPrice * od.Quantity * (1 - od.Discount)) AS annual_revenue
FROM [Order Details] od
INNER JOIN Orders o 
    ON o.OrderID = od.OrderID
INNER JOIN Customers c 
    ON o.CustomerID = c.CustomerID
GROUP BY YEAR(o.OrderDate), c.CompanyName
ORDER BY order_year, annual_revenue DESC

仅统计全平台年度总销售额(简化版)

SELECT 
    YEAR(o.OrderDate) AS order_year,
    SUM(od.UnitPrice * od.Quantity * (1 - od.Discount)) AS annual_revenue
FROM [Order Details] od
INNER JOIN Orders o 
    ON o.OrderID = od.OrderID
GROUP BY YEAR(o.OrderDate)
ORDER BY order_year

改动说明

  • 用方括号[]包裹带空格的表名[Order Details],兼容Northwind常见运行环境
  • 将年份别名替换为order_year,避免和SQL保留关键字冲突
  • 新增关联Customers表获取企业名称,在GROUP BY中增加企业维度,匹配分企业统计的需求
  • 新增排序逻辑,方便直接查看同年度企业销售额排名

内容的提问来源于stack exchange,提问作者Joe Ng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:06:02