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

如何在同一数据表中实现不同行不同列的数值相减?

Kusto实现跨行列数值相减与列填充

需求说明

需要对同一数据表中不同行的列值进行计算:用A2行的C3值减去A1行的C2值,同时生成填充后的C2New列,最终得到目标数据表。

修正测试数据

你提供的测试代码中部分值和示例表不符,先修正为符合示例的空值结构:

let X = datatable(c1:string, c2:int, c3:int)
[
    'a1', 2, int(null),
    'a2', int(null), 3,
    'b1', int(null), 4
];

实现查询

通过toscalar提取固定值,结合case函数实现列填充与差值计算,代码如下:

let X = datatable(c1:string, c2:int, c3:int)
[
    'a1', 2, int(null),
    'a2', int(null), 3,
    'b1', int(null), 4
];
// 提取A1行的C2值作为全局标量
let a1_c2 = toscalar(X | where c1 == 'a1' | project c2);
X
// 生成C2New列:A1、A2行填充为A1的C2值,其他行保留原C2值
| extend C2New = case(c1 in ('a1', 'a2'), a1_c2, c2)
// 生成C4列:仅A2行计算C3 - C2New的差值,其他行留空
| extend C4 = case(c1 == 'a2', c3 - C2New, int(null))
// 按目标表顺序展示列
| project c1, c2, C2New, c3, C4

查询结果

执行后会得到和你目标表一致的输出:

c1c2C2Newc3C4
a122
a2231
b14

思路说明

  • 用toscalar直接提取A1行的C2值,避免了join/self-join可能带来的复杂行关联问题,更适合这种单值引用场景。
  • case函数用来精准控制不同行的列值填充与计算逻辑,只对需要处理的行(A1、A2)进行操作,其他行保持原有状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:45:33