SQL如何将两列数据纵向合并为单个列?
嘿,这个需求其实就是把两列的所有值合并成单列,也就是咱们常说的列转行操作~下面分几种主流数据库给你对应的SQL写法,直接套用就行:
解决方案
MySQL / MariaDB
最直观的方式是用 UNION ALL 把两个查询结果拼在一起,每个查询分别取出对应列并别名成 combined:
SELECT city AS combined FROM your_table_name UNION ALL SELECT city2 AS combined FROM your_table_name;
小贴士:如果需要去掉重复值,把
UNION ALL换成UNION就行,但UNION会额外做排序去重,性能比UNION ALL稍差,按需选择。
PostgreSQL
写法和MySQL基本一致,同样可以用UNION ALL:
SELECT city AS combined FROM your_table_name UNION ALL SELECT city2 AS combined FROM your_table_name;
如果你的PostgreSQL版本在10及以上,也可以试试更简洁的数组拆分行写法:
SELECT UNNEST(ARRAY[city, city2]) AS combined FROM your_table_name;
这个方法是把每行的city和city2打包成数组,再拆成单独的行,效果和上面完全一样。
SQL Server
除了UNION ALL的写法,还可以用CROSS APPLY配合值构造器来实现,写法更灵活:
方法1:UNION ALL
SELECT city AS combined FROM your_table_name UNION ALL SELECT city2 AS combined FROM your_table_name;
方法2:CROSS APPLY
SELECT c.combined FROM your_table_name CROSS APPLY (VALUES (city), (city2)) AS c(combined);
重要提示
- 记得把代码里的
your_table_name替换成你实际的表名哦 - 要确保
city和city2列的数据类型一致,如果不一致,可能需要用CAST/CONVERT做类型转换,比如:CAST(city2 AS VARCHAR(50)) AS combined
内容的提问来源于stack exchange,提问作者Shubham Mishra
相关产品推荐
相关产品推荐

