SQL查询需求:如何实现列值不同返回'n/a'、相同返回单值
SQL修改方案
要实现“列值存在差异时显示'n/a',值全同时显示唯一值”的需求,你可以通过聚合函数结合条件判断来实现,修改后的SQL如下:
SELECT CASE WHEN COUNT(DISTINCT e1.i_code) > 1 THEN 'n/a' ELSE MAX(e1.i_code) END AS apple, CASE WHEN COUNT(DISTINCT e2.i_code) > 1 THEN 'n/a' ELSE MAX(e2.i_code) END AS banana, CASE WHEN COUNT(DISTINCT e3.i_code) > 1 THEN 'n/a' ELSE MAX(e3.i_code) END AS grape FROM table_d d JOIN table_e e1 ON d.x_code = e1.g_code JOIN table_e e2 ON d.y_code = e2.g_code JOIN table_e e3 ON d.z_code = e3.g_code WHERE d.a_code = '12345';
核心逻辑说明:
COUNT(DISTINCT 列名):统计该列去重后的取值数量,以此判断是否存在不同值CASE条件判断:如果去重后的数量大于1,说明列中有不同值,返回'n/a';否则用MAX()(或MIN(),因为所有值一致)获取该列的唯一值- 移除原查询的
GROUP BY子句:原分组会将不同的列值组合拆分成多行,而我们需要将所有符合条件的行聚合为一行,统一判断各列的取值情况
内容的提问来源于stack exchange,提问作者Endman888
相关产品推荐
相关产品推荐

