Oracle数据库如何提取同表任意多列的唯一值单列结果集?
多列提取单列唯一值的解决方案
问题说明
现有表结构及数据:
Id, col_1, col_2, col_3 1 A A B 2 B B B 3 C C D
需要输出单列的唯一值:
res_column A B C D
已尝试的方法:
- Union仅适用于2-3列,不符合需求;
- 了解过pivot/unpivot,但未掌握其用法。
解决方案
方法一:使用UNPIVOT(适配SQL Server等支持该语法的数据库)
通过UNPIVOT把横向的多列转成纵向的单列数据,再用DISTINCT去重即可,代码如下:
SELECT DISTINCT res_column FROM ( SELECT col_1, col_2, col_3 FROM 你的表名 -- 替换为实际表名 ) AS src UNPIVOT ( res_column FOR cols IN (col_1, col_2, col_3) -- 列出所有需要提取值的列 ) AS unpvt;
方法二:UNION ALL + 去重(通用所有数据库)
你之前对Union的理解有偏差,不管多少列都可以用这种方式,只需要给每一列加一个SELECT语句,用UNION ALL合并后去重,代码示例:
SELECT DISTINCT res_column FROM ( SELECT col_1 AS res_column FROM 你的表名 UNION ALL SELECT col_2 AS res_column FROM 你的表名 UNION ALL SELECT col_3 AS res_column FROM 你的表名 -- 若有更多列,继续添加UNION ALL和对应的SELECT语句即可 ) AS temp;
内容的提问来源于stack exchange,提问作者AlexH
相关产品推荐
相关产品推荐

