如何通过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
相关产品推荐
相关产品推荐

