如何在SQL中根据条件动态选择返回对应多列
实现方案
方案1:条件判断动态返回字段(写法最简洁,全数据库兼容)
SELECT id, position, CASE WHEN position = '1' THEN A ELSE D END AS field1, CASE WHEN position = '1' THEN B ELSE E END AS field2, CASE WHEN position = '1' THEN C ELSE NULL END AS field3 FROM 你的实际表名 WHERE id = 待查询的id值;
如果使用MySQL这类支持IF函数的数据库,可以简化写法:
SELECT id, position, IF(position = '1', A, D) AS field1, IF(position = '1', B, E) AS field2, IF(position = '1', C, NULL) AS field3 FROM 你的实际表名 WHERE id = 待查询的id值;
方案2:UNION ALL分支查询(完全匹配你预期的返回逻辑)
因为SQL要求单次查询返回的列数固定,所以分支查询时我们给非position='1'的结果补一个空值列,你可以在业务层根据position的值判断是否展示最后一列:
SELECT id, position, A, B, C FROM 你的实际表名 WHERE id = 待查询的id值 AND position = '1' UNION ALL SELECT id, position, D, E, NULL FROM 你的实际表名 WHERE id = 待查询的id值 AND position != '1';
测试验证:用你给出的示例数据测试,查询id=0时返回
0,1,a,b,c,查询id=1时返回1,2,d,e,NULL,符合你的预期需求。
内容的提问来源于stack exchange,提问作者sundy
相关产品推荐
相关产品推荐

