1. Fila a columnaunpivot()
Esta es una función de SQLServer, no disponible en MySQL
1.1 Objetivos
Convierta la siguiente tabla 1 al formato que se muestra en la tabla 2
IDENTIFICACIÓN | Teléfono1 | Teléfono2 |
---|---|---|
1 | 11 | 12 |
2 | 21 | 23 |
IDENTIFICACIÓN | Número de teléfono | Tipo de telefono |
---|---|---|
1 | 11 | Teléfono1 |
1 | 12 | Teléfono2 |
2 | 21 | Teléfono1 |
2 | 22 | Teléfono2 |
1.2 Código y explicación
Dependiendo de los requisitos del objetivo, necesitamos:
- Cree dos nuevas columnas Phone_num, Phone_type
- Elimine las columnas Phone1, Phone2 de la tabla anterior y use sus nombres de columna como elementos de la nueva columna Phone_type
- Rellene estas dos nuevas columnas en función del ID
select * from Customers
unpivot (
-- 创建新列: Phone_num
Phone_num
-- 创建新列: Phone_type
-- 删除旧列: Phone1, Phone2,并将它们的列名作为 Phone_type 的值
-- 遍历这些列名,结合ID,查找旧表中的电话数据填入 Phone_num
for Phone_type in (Phone1, Phone2)
) as up;
2. Columna a filapivot()
El objetivo es el contrario al de la parte anterior:
IDENTIFICACIÓN | Número de teléfono | Tipo de telefono |
---|---|---|
1 | 11 | Teléfono1 |
1 | 12 | Teléfono2 |
2 | 21 | Teléfono1 |
2 | 22 | Teléfono2 |
IDENTIFICACIÓN | Teléfono1 | Teléfono2 |
---|---|---|
1 | 11 | 12 |
2 | 21 | 23 |
Dependiendo del objetivo, necesitamos:
- Elimine las columnas Phone_num, Phone_type de la tabla anterior y use sus elementos como los nombres de columna de la nueva tabla
- Cree estas dos nuevas columnas Phone1, Phone2
- Complete una nueva columna basada en ID y Phone_type
select * from Customers
pivot (
-- 删除旧列: Phone_nume
-- 这里必须是一个聚合函数 Aggregation,例如 sum() avg()
-- 因此这要求电话号码的格式必须为数字,不能是字符串
sum(Phone_num)
-- 创建新列: Phone1, Phone2
-- 删除旧列: Phone_type
-- 遍历这些列名,结合ID,查找旧表中的电话数据填入新表
for Phone_type in (Phone1, Phone2)
) as up;