【问题标题】:SQL Server : IF null Replace with other column dataSQL Server : IF null 替换为其他列数据
【发布时间】:2015-09-10 01:22:25
【问题描述】:

我对 SQL Server 真的很陌生。我想用同一个表中另一列的数据替换一个空列。

Declare @ref As mgr.gl_jlhdr.ref_no
Declare @P_no As mgr.gl_jlhdr.jlno

IF ref = Null
Then ref = P_no
end if

请帮忙。

我收到一个错误

类型名称“mgr.gl_jlhdr.ref_no”包含的前缀数量超过了最大数量。最大值为 1。

我想要的是用其他列数据替换一个空值列。

例子

如果reference_no 为空,我希望它使用Product_no 数据。

【问题讨论】:

  • 请使用示例数据和所需结果编辑您的问题。
  • 想要的是用其他列数据替换空值列。例如,如果 reference_no 为空,我希望它使用 Product_no 数据。
  • 该代码中有很多错误。首先,您需要“声明”为一种类型(例如 INT)。其次,稍后在引用变量时需要包含“@”。第三,If... then... end if 语法不是 SQL。第四,IF @ref = Null 永远不会起作用:你需要使用IS NULL。 Null 很棘手,有一大堆函数专门用于解决它们(COALESCEISNULLIS NULL)——你真的需要尽快掌握所有这些。

标签: sql sql-server-2005 sql-server-2008-r2 numbers max


【解决方案1】:

在查询中,您可以使用coalesce()

select coalesce(reference_no, product_no)
from mgr.gl_jlhdr;

【讨论】:

  • 在SQL-Server中,我更倾向于使用ISNULL,但原理是一样的。
  • @MikeK。 . . COALESCE() 是 ANSI 标准,可以接受两个以上的参数。在某些情况下,ISNULL() 是更好的选择——它只计算第一个参数一次,如果它是一个复杂的表达式,例如子查询,则更好。
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2020-08-22
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
相关资源
最近更新 更多