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

编写SQL查询2020、2021年发票总和并计算2021年发票金额增长率

SQL修改方案

你需要先分别统计2020、2021年各自的发票总金额,再代入增长率公式计算即可,修改后的代码如下,同时修正了你原SQL中关联字段拼写错误的问题:

SELECT 
    -- 分别统计两年总金额
    SUM(CASE WHEN YEAR(dbo.Invoice.InvoiceDate) = 2020 THEN UnitPrice * UnitQuantity ELSE 0 END) AS total_2020,
    SUM(CASE WHEN YEAR(dbo.Invoice.InvoiceDate) = 2021 THEN UnitPrice * UnitQuantity ELSE 0 END) AS total_2021,
    -- 计算增长率,乘以100可直接得到百分比数值,NULLIF避免除以0报错
    (SUM(CASE WHEN YEAR(dbo.Invoice.InvoiceDate) = 2021 THEN UnitPrice * UnitQuantity ELSE 0 END) 
    - SUM(CASE WHEN YEAR(dbo.Invoice.InvoiceDate) = 2020 THEN UnitPrice * UnitQuantity ELSE 0 END))
    * 100.0 / NULLIF(SUM(CASE WHEN YEAR(dbo.Invoice.InvoiceDate) = 2020 THEN UnitPrice * UnitQuantity ELSE 0 END), 0) 
    AS growth_rate_2021
FROM 
    dbo.Invoicelineitem 
INNER JOIN -- 原LEFT JOIN配合WHERE过滤Invoice字段实际等价于INNER JOIN,这里直接写更清晰
    dbo.Invoice ON dbo.Invoicelineitem.InvoiceKey = dbo.Invoice.InvoiceKey
WHERE
    YEAR(dbo.Invoice.InvoiceDate) IN (2020, 2021); -- 用YEAR函数比LIKE兼容性更好,适合日期类型字段

补充说明

  • 如果你使用的数据库不支持YEAR()函数,也可以把WHERE条件换回原来的InvoiceDate LIKE '2020%' OR InvoiceDate LIKE '2021%'写法,条件聚合里的判断也对应换成InvoiceDate LIKE '2020%'即可
  • growth_rate_2021字段的结果就是2021年对比2020年的增长率,比如结果为15就是同比增长15%,结果为负就是同比下降
  • 如果需要展示为带百分号的字符串,可以根据你使用的数据库调用对应的格式化函数处理即可

内容的提问来源于stack exchange,提问作者Asad Bin Zaman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:39:03