1. 行转列 unpivot()
这是一个 SQLServer 函数,在 MySQL 里用不了
1.1 目标
将如下表1转化为表2所示格式
ID | Phone_num | Phone_type |
---|
1 | 11 | Phone1 | 1 | 12 | Phone2 | 2 | 21 | Phone1 | 2 | 22 | Phone2 |
1.2 代码与解释
根据目标需求,我们需要:
- 创建两个新列 Phone_num, Phone_type
- 删除旧表的 Phone1, Phone2 两列,并将它们的列名作为新列 Phone_type 的元素
- 根据 ID 填充这两个新列
select * from Customers
unpivot (
Phone_num
for Phone_type in (Phone1, Phone2)
) as up;
2. 列转行 pivot()
目标与上部分相反:
ID | Phone_num | Phone_type |
---|
1 | 11 | Phone1 | 1 | 12 | Phone2 | 2 | 21 | Phone1 | 2 | 22 | Phone2 |
根据目标,我们需要:
- 删除旧表的 Phone_num, Phone_type 两列,并将它们的元素作为新表的列名
- 创建这两个新列 Phone1, Phone2
- 根据 ID 以及 Phone_type 填充新列
select * from Customers
pivot (
sum(Phone_num)
for Phone_type in (Phone1, Phone2)
) as up;
|