【问题标题】:How to replace NULL values in a row, with other values in that same row in SQL Query如何将一行中的 NULL 值替换为 SQL 查询中同一行中的其他值
【发布时间】:2022-11-13 18:50:12
【问题描述】:

所以我查询如下内容,但是,我的一些行是 NULL,我希望查询将 NULL 的值替换为同一行中的特定不同值:

SELECT * FROM table      >>>

table
"ID"    "First Name"    "Last Name"    "Default - First Name"   "Default - Last Name"
"1111"  "Bill"          "Jones"        "FN Name 1"              "LN Name 1"
"2222"   NULL            NULL          "FN Name 2"              "LN Name 2"
"3333"  "Emma"          "Jean"         "FN Name 3"              "LN Name 3"

所以我希望我的最终查询结果是这样的:

Final Query Result
"ID"    "First Name"    "Last Name"    "Default - First Name"   "Default - Last Name"
"1111"  "Bill"          "Jones"        "FN Name 1"              "LN Name 1"
"2222"  "FN Name 2"     "LN Name 2"    "FN Name 2"              "LN Name 2"
"3333"  "Emma"          "Jean"         "FN Name 3"              "LN Name 3"

所以我想用默认名字和姓氏列中同一行中的值替换 NULL 值。

关于如何查询这个的任何想法?

【问题讨论】:

  • 我删除了冲突的 DBMS 标签。请为您真正使用的数据库产品添加一个标签。
  • 您正在寻找coalesce()

标签: sql


【解决方案1】:
  • 您可以使用coalesce 函数指定第一个非空值

  • 在您的情况下,代码将始终查找 first_name 列值,如果值为空,它将从 default_first_name 列中获取值

  • 您可以根据需要更改逻辑

  • 同样,如果 default_first_name,您可以传递要采用的值 或 default_last_name 有空值

select
*,
coalesce(first_name, default_first_name) as new_first_name,
coalesce(last_name, default_last_name) as new_last_name,
default_first_name,
default_last_name
from table
select
*,
coalesce(first_name, default_first_name) as new_first_name,
coalesce(last_name, default_last_name) as new_last_name,
coalesce(default_first_name, 'NO VALUE FOUND') as new_default_first_name,
default_last_name, 'THIS IS NULL') as new_default_last_name
from table

【讨论】:

    【解决方案2】:
    SELECT id,
            ifnull(first_name,default_first_name) as first_name, 
            ifnull(last_name,default_last_name) as last_name from mytable
    

    如果你对列名有把握,MySQL 总是可以使用 ifnull,MSSQL Server 使用 isnull。此函数检查第一个参数是否为空值,然后返回第二个参数的“值”,作为列。

    希望这可以帮助 :)

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多