如何在DOMO的SQL中计算两列差值并生成新列?
在DOMO SQL中计算期限差值并生成额外列
数据表结构
| 起始期限(Begin_Term) | 结束期限(End_Term) |
|---|---|
| 2018 | Current |
| -select- | Current |
| 2015 | 2019 |
| -select- | 2018 |
你尝试使用语句 case when SUM('End_Term') - SUM ('Begin_Term') then 1 else 0 end 计算期限差,但结果仅显示0和1,需要在DOMO平台实现两列相减并生成显示差值的额外列。
问题分析
你的语句存在两个核心问题:
- 使用了
SUM()聚合函数,但你需要的是逐行计算单条记录的期限差,聚合操作会将所有行的数值求和后再计算,最终只会得到单个结果,用case when判断自然只能返回0或1。 End_Term包含Current、Begin_Term包含-select-这类非数值字符串,直接进行减法运算会报错或得到异常结果,必须先处理这些特殊值。
DOMO SQL解决方案
DOMO SQL兼容标准SQL语法,针对你的场景,需先转换特殊值为可计算的数值,再逐行计算差值:
完整SQL示例
SELECT Begin_Term, End_Term, -- 处理特殊值并计算期限差值 CASE -- 处理起始期限为无效值的情况,可根据业务需求替换为NULL或对应年份 WHEN Begin_Term = '-select-' THEN NULL -- 将End_Term的Current替换为当前年份后计算差值 WHEN End_Term = 'Current' THEN YEAR(CURRENT_DATE) - CAST(Begin_Term AS INT) -- 正常数值类型的期限相减 ELSE CAST(End_Term AS INT) - CAST(Begin_Term AS INT) END AS Term_Difference FROM 你的数据表名;
关键说明
CAST(字段名 AS INT):将字符串格式的年份转换为整数类型,确保减法运算可正常执行。YEAR(CURRENT_DATE):DOMO支持的内置函数,用于获取当前系统年份,替代Current字符串。- 对于
-select-这类无效值,可根据业务逻辑调整处理方式,比如替换为对应结束期限的年份,而不是NULL。 - 无需使用
SUM()函数,因为需求是计算每行独立的期限差值,而非聚合所有行的总和差值。
内容的提问来源于stack exchange,提问作者jeff
相关产品推荐
相关产品推荐

