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

SQL需求:根据指定条件跨行列取值计算Test列

解决方案:跨行列取值实现Test列的比例计算

根据你遇到的跨行列取除数的问题,分几种常用工具的实现方案:

Excel 环境

  • 直接用查找函数获取目标Reg_Nr对应的Grade作为除数,无需额外新增列:
    假设Reg_Nr在A列,Grade在C列,在Test列(比如D列)的单元格输入公式:
    =IF(A2=1585, C2/VLOOKUP(1645, $A:$C, 3, FALSE), IF(A2=1588, C2/VLOOKUP(1648, $A:$C, 3, FALSE), ""))
    
    要是你用的是Excel 365或更高版本,XLOOKUP会更简洁直观:
    =IF(A2=1585, C2/XLOOKUP(1645, $A:$A, $C:$C), IF(A2=1588, C2/XLOOKUP(1648, $A:$A, $C:$C), ""))
    
    下拉公式就能批量计算所有行的Test值。

Power BI(DAX计算列)

  • 新建计算列,通过筛选获取指定Reg_Nr的Grade值:
    Test = 
    SWITCH(
        TRUE(),
        '你的表名'[Reg_Nr] = 1585, '你的表名'[Grade] / CALCULATE(MAX('你的表名'[Grade]), FILTER('你的表名', '你的表名'[Reg_Nr] = 1645)),
        '你的表名'[Reg_Nr] = 1588, '你的表名'[Grade] / CALCULATE(MAX('你的表名'[Grade]), FILTER('你的表名', '你的表名'[Reg_Nr] = 1648)),
        BLANK()
    )
    
    这里用MAX是因为每个Reg_Nr对应唯一行,取最大/最小值结果一致,确保能精准拿到目标除数。

SQL 查询场景

  • 两种实现方式,按需选择:
    方法1:自连接获取除数
    SELECT 
        t1.Reg_Nr,
        t1.Class,
        t1.Grade,
        CASE
            WHEN t1.Reg_Nr = 1585 THEN t1.Grade / t2.Grade
            WHEN t1.Reg_Nr = 1588 THEN t1.Grade / t3.Grade
            ELSE NULL
        END AS Test
    FROM 你的表名 t1
    LEFT JOIN 你的表名 t2 ON t2.Reg_Nr = 1645
    LEFT JOIN 你的表名 t3 ON t3.Reg_Nr = 1648;
    
    方法2:子查询直接取除数
    SELECT 
        Reg_Nr,
        Class,
        Grade,
        CASE
            WHEN Reg_Nr = 1585 THEN Grade / (SELECT Grade FROM 你的表名 WHERE Reg_Nr = 1645)
            WHEN Reg_Nr = 1588 THEN Grade / (SELECT Grade FROM 你的表名 WHERE Reg_Nr = 1648)
            ELSE NULL
        END AS Test
    FROM 你的表名;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 04:05:18