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

如何用Databricks SQL实现两行数据相减生成新行?

Databricks SQL 解决方案

假设你的表名为 program_reports,存储数值的列名为 monthly_value(请根据实际表结构替换这两个名称)。以下查询可以生成你需要的第三行数据,并与原表数据合并:

-- 合并原数据与计算出的Net行
SELECT * FROM program_reports
UNION ALL
-- 计算每个分组下的Net值
SELECT
  ProgramId,
  Category,
  '3. Net' AS Subcategory,
  ReportMonth,
  ReportYear,
  -- 取分组内第一行数值减去第二行数值
  (MAX(CASE WHEN rn = 1 THEN monthly_value END) - MAX(CASE WHEN rn = 2 THEN monthly_value END)) AS monthly_value
FROM (
  -- 给每个分组内的行按Subcategory排序并编号
  SELECT
    *,
    ROW_NUMBER() OVER (
      PARTITION BY ProgramId, Category, ReportMonth, ReportYear
      ORDER BY Subcategory
    ) AS rn
  FROM program_reports
) ranked
-- 只保留有两行数据的分组(确保能计算差值)
GROUP BY ProgramId, Category, ReportMonth, ReportYear
HAVING COUNT(*) = 2;

关键说明:

  • PARTITION BY 子句确保按 ProgramId、Category、ReportMonth、ReportYear 分组处理,保证每个分组内的计算独立。
  • ROW_NUMBER() 按 Subcategory 排序给行编号,确保第一行和第二行是你需要做减法的两行(如果你的排序逻辑不是按Subcategory,可以修改ORDER BY后的字段)。
  • HAVING COUNT(*) = 2 过滤掉分组内数据行数不等于2的情况,避免出现无效的差值计算。

如果你的数值列名称或表名不同,直接替换对应的标识符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:42:31