如何将表内两个列的数据整合到查询的同一个字段中展示
实现方案
你需要的是将多列转为多行的列转行操作,不同数据库可选择的实现方式如下:
- 所有支持
UNION ALL的数据库通用方案
这是兼容性最高的写法,不需要依赖数据库独有的语法:
SELECT DepartureDate1 AS `DepartureDate1&2` FROM `Table` UNION ALL SELECT DepartureDate2 AS `DepartureDate1&2` FROM `Table`
如果需要对原表加过滤条件,推荐统一套在子查询中,避免重复写WHERE条件:
SELECT `DepartureDate1&2` FROM ( SELECT DepartureDate1 AS `DepartureDate1&2`, 过滤所需字段 FROM `Table` UNION ALL SELECT DepartureDate2 AS `DepartureDate1&2`, 过滤所需字段 FROM `Table` ) t WHERE 你的过滤规则
- 支持高级语法的数据库简化方案
如果你使用的是较新版本的商业数据库,可以用更简洁的专属语法:- SQL Server/Oracle可用UNPIVOT语法:
SELECT `DepartureDate1&2` FROM `Table` UNPIVOT ( `DepartureDate1&2` FOR date_col IN (DepartureDate1, DepartureDate2) ) upvt- PostgreSQL/MySQL 8.0.19+可用LATERAL + VALUES语法:
SELECT v.`DepartureDate1&2` FROM `Table` t CROSS JOIN LATERAL ( VALUES (t.DepartureDate1), (t.DepartureDate2) ) v(`DepartureDate1&2`)
补充说明:如果不需要保留两个字段中的NULL值,可在查询末尾添加
WHEREDepartureDate1&2IS NOT NULL过滤无效行。
内容的提问来源于stack exchange,提问作者Thyreme
相关产品推荐
相关产品推荐

