You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CASE根据条件选择p1/p2并获取值来源的列名?

用单条SQL同时获取目标值和它的来源列

当然可以!CASE语句正好能帮你完成这个需求——不仅能根据p1f/p2f的条件选出对应p1/p2的值,还能同步标记这个值来自哪一列,完全用单条查询就能实现。

假设你的表名为your_table,包含p1、p2、p1f、p2f这几列,直接用下面的SQL即可:

SELECT
  -- 根据条件选择对应的值
  CASE
    WHEN p1f = 0 THEN p1
    WHEN p2f = 0 THEN p2
    -- 可选:如果两个条件都不满足时的默认值,比如返回NULL或特定提示
    ELSE NULL
  END AS selected_value,
  -- 标记值的来源列名
  CASE
    WHEN p1f = 0 THEN 'p1'
    WHEN p2f = 0 THEN 'p2'
    ELSE NULL
  END AS value_source
FROM your_table
-- 如果要定位到某一行数据,添加WHERE条件
WHERE your_primary_key = 'target_row_id';

逻辑说明:

  • 两个CASE语句保持判断顺序一致:先检查p1f = 0,满足就取p1的值,来源标记为'p1';如果p1f不为0,再检查p2f = 0,取p2的值并标记来源为'p2'。
  • 如果存在p1f和p2f同时为0的情况,会优先返回p1的值(因为CASE是按顺序匹配第一个满足的条件),你可以根据业务需求调整判断顺序或者添加额外逻辑(比如抛出提示、返回两者的组合等)。
  • 这个写法兼容MySQL、PostgreSQL、SQL Server、Oracle等绝大多数主流数据库,因为CASE是SQL标准语法。

内容的提问来源于stack exchange,提问作者igigi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:29:54