如何仅用SELECT语句实现列分组并转换为目标表结构?
单表结构转换的SQL实现
原始数据集
| InTrafficA | OutTraffic A | InTrafficB | OutTrafficB |
|---|---|---|---|
| 10000 | 12500 | 15000 | 20000 |
目标表结构
| Class | InTraffic | OutTraffic |
|---|---|---|
| A | 10000 | 12500 |
| B | 15000 | 20000 |
限制条件
- 仅允许使用
SELECT语句,不可创建视图或使用其他命令
当前错误查询语句
SELECT * FROM (SELECT InTrafficA, OutTrafficA FROM SAME_TABLE) AS A CROSS JOIN (SELECT InTrafficB, OutTrafficB FROM SAME_TABLE) AS B
正确解决方案
使用UNION ALL合并两组数据即可实现目标结构,无需交叉连接:
SELECT 'A' AS Class, InTrafficA AS InTraffic, `OutTraffic A` AS OutTraffic FROM SAME_TABLE UNION ALL SELECT 'B' AS Class, InTrafficB AS InTraffic, OutTrafficB AS OutTraffic FROM SAME_TABLE
关键说明
UNION ALL会将两个查询的结果按顺序合并,生成目标结构的两行数据,避免交叉连接产生的冗余结果- 列名
OutTraffic A包含空格,需根据数据库类型用反引号(MySQL)或方括号(SQL Server)包裹,确保语法正确 - 通过硬编码
'A'和'B'指定Class字段值,同时重命名原始列名匹配目标结构
内容的提问来源于stack exchange,提问作者Maxine
相关产品推荐
相关产品推荐

