【问题标题】:Using case expressions in a calculated column postgresql在计算列 postgresql 中使用 case 表达式
【发布时间】:2021-01-06 21:32:58
【问题描述】:

已编辑以提供示例数据 我正在尝试创建一个计算列,将其他 2 列相加,这应该很容易。但是,两列中的某些值都是空的,所以我想使用 case 表达式将两列中的空值替换为 0,然后将结果值相加。另一个复杂的因素是第二列包含带有逗号的文本值,在我添加它们之前需要将它们转换为数字。我目前正在尝试做的是:

SELECT (case when pm."PS" is null then 0 else pm."PS" end) + (case when pm."PS-PREV1" is null then 0 else replace(pm."PS-PREV1", ',', '')::numeric end) AS "Sales"
FROM pm

样本数据:

PS PS-PREV1
20000 null
30000 20,000
null null
null 30,000

期望的输出:

output
20000
50000
0
30000

这只是返回第一列的值而不添加第二列。我哪里错了?我是不是想多了?

【问题讨论】:

  • 请向我们展示示例数据以及您现在得到的结果以及您想要的输出
  • @eshirvana 刚刚编辑以提供示例数据,谢谢!
  • 您的代码运行良好:db-fiddle.com/f/mJPmXiw7EgaLtBfPbEPkKg/0

标签: postgresql casting case calculated-columns


【解决方案1】:

你的代码应该可以工作,但是你可以写得更干净一点:

SELECT COALESCE(pm."PS",0) 
       + COALESCE(replace(pm."PS-PREV1", ',', '')::numeric,0) AS "Sales"
FROM pm

【讨论】:

  • 谢谢你——这更容易看,而且完美无瑕
猜你喜欢
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多