当前位置: 首页 > news >正文

sql 如果字段为空就用另一个字段

您可以使用COALESCE()函数CASE WHEN表达式来处理这个逻辑:

方案一:使用COALESCE()函数(推荐)

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,COALESCE(bpi.winning_bid_amount,bpi.bid_price)ASwinningBidAmountFROMbid_project_info bpi

方案二:使用CASE WHEN表达式

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,CASEWHENbpi.winning_bid_amountISNULLTHENbpi.bid_priceELSEbpi.winning_bid_amountENDASwinningBidAmountFROMbid_project_info bpi

方案三:使用IFNULL()函数(MySQL、SQLite等)

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,IFNULL(bpi.winning_bid_amount,bpi.bid_price)ASwinningBidAmountFROMbid_project_info bpi

方案四:使用ISNULL()函数(SQL Server)

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,ISNULL(bpi.winning_bid_amount,bpi.bid_price)ASwinningBidAmountFROMbid_project_info bpi

📌 各方案对比

方案函数适用数据库特点
方案一COALESCE()所有主流数据库(标准SQL)最通用,可处理多个参数,返回第一个非NULL值
方案二CASE WHEN所有数据库最灵活,可处理复杂条件
方案三IFNULL()MySQL、SQLite、MariaDB简洁,但只适用于特定数据库
方案四ISNULL()SQL ServerSQL Server专用

💡 推荐与说明

推荐使用方案一的COALESCE()函数,原因如下:

  1. 标准化COALESCE()是 SQL 标准函数,在所有主流数据库(MySQL、PostgreSQL、Oracle、SQL Server、SQLite等)中都可用
  2. 可扩展性:可以处理多个字段的优先级,例如:
    COALESCE(bpi.winning_bid_amount,bpi.bid_price,bpi.estimate_price,0)ASwinningBidAmount
    (依次尝试 winning_bid_amount、bid_price、estimate_price,都为空则返回 0)
  3. 简洁性:代码比CASE WHEN更简洁

🔍 完整查询示例

SELECTbpi.batch_idASbatchId,bpi.batch_nameASbatchName,bpi.plate_nameASplateName,bpi.categoryASproductType,bpi.product_idASproductId,bpi.product_nameASproductName,bpi.opening_timeASopeningTime,bpi.section_idASsectionId,bpi.section_nameASsectionName,bpi.company_idAScompanyId,bpi.company_nameASsupplier,bpi.purchase_typeASpurchaseType,-- 如果winning_bid_amount为空,则使用bid_priceCOALESCE(bpi.winning_bid_amount,bpi.bid_price)ASwinningBidAmountFROMbid_project_info bpiWHERE...-- 可以添加其他查询条件ORDERBY...-- 可以添加排序

⚠️ 注意事项

  1. 确保bid_price字段存在于bid_project_info表中
  2. 如果bid_price也可能为 NULL,可以使用嵌套的COALESCE()或设置默认值:
    COALESCE(bpi.winning_bid_amount,bpi.bid_price,0)ASwinningBidAmount
  3. 数据类型要兼容:winning_bid_amountbid_price应该是相同或兼容的数据类型(如都是 DECIMAL、FLOAT 等)
http://www.jsqmd.com/news/245430/

相关文章:

  • Android 基础入门教程2.5.2 GridView(网格视图)的基本使用
  • AI赋能央企数智化转型研究报告:AI赋能央企转型应用现状、AI赋能央企转型路径与挑战、AI赋能央企转型服务商体系、未来展望
  • Android 基础入门教程2.5.3 Spinner(列表选项框)的基本使用
  • 大模型推理框架对比:SGLang 与 vLLM 的核心差异解析
  • ​ Android 基础入门教程​2.5.4 AutoCompleteTextView(自动完成文本框)的基本使用
  • Agent搭建-超详细教程,存一下吧
  • 事务中的隔离性是如何保证的呢?(你解释一下MVCC)
  • 如何在liunx环境安装PageAdmin Cms系统
  • 数据治理到底应该怎么治理?治理什么?在哪治理?治理路径是什么?治理流程又是什么?附案例及解决方案
  • 既然强转会报错,java为啥不封装处理好,避免强转报错?
  • 2026常见的企业网站建设系统推荐
  • 帧同步游戏设置一个“固定输入延迟”它背后的逻辑
  • mkcert 本地 HTTPS 证书全平台教程
  • 合集(WORD+PPT):AI大模型赋能数字政府智慧政务、智慧党建、社会治理、基层治理、市域治理等
  • Day01-07.搭建项目环境-测试部署的微服务14:20
  • VR禁毒知识信息平台:科技赋能全民禁毒教育新载体
  • A17-300余份AI大模型赋能教育、数字校园、智慧高校、智慧教育、教育大脑、高校大脑、智慧职教、智慧幼教(PPT+WORD,见文末)
  • 【原创】使用langchain与MCP 与 Chrome DevTools 打造可调用浏览器工具的 Chat Agent
  • 22.C++进阶:⼆叉搜索树|手撕二叉搜索树
  • 搞定JAX高效并行训练
  • Spring家族生态深度剖析:从厨房新手到餐饮帝国的演进史
  • 写了5年C++才发现:new背后藏着两个函数,placement new让我能控制其中一个
  • 8继承多态
  • Spring Boot的约定优于配置:智能管家的“隐形”艺术
  • 大家一直催更的Agent学习路线来喽!
  • Oracle 19c入门学习教程,从入门到精通,Oracle体系结构 —— 知识点详解(2)
  • 守护能源与数据的安全防线:从UL 2075标准解析储能及数据中心氢探技术的演进
  • C++类型判断
  • Python 内置 venv 虚拟环境工具完全指南(附 uv 工具无缝升级教程)
  • 2026机器视觉同轴光源品牌甄选指南:解锁高精度检测的照明密钥