1. Linha para Colunaunpivot()
Esta é uma função SQLServer, não disponível no MySQL
1.1 Objetivos
Converta a seguinte tabela 1 para o formato mostrado na tabela 2
identificação | Telefone1 | Telefone2 |
---|---|---|
1 | 11 | 12 |
2 | 21 | 23 |
identificação | Número_telefone | Tipo de telefone |
---|---|---|
1 | 11 | Telefone1 |
1 | 12 | Telefone2 |
2 | 21 | Telefone1 |
2 | 22 | Telefone2 |
1.2 Código e explicação
Dependendo dos requisitos de destino, precisamos:
- Crie duas novas colunas Phone_num, Phone_type
- Exclua as colunas Phone1, Phone2 da tabela antiga e use seus nomes de coluna como elementos da nova coluna Phone_type
- Preencha essas duas novas colunas com base no 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. Coluna a linhapivot()
O objetivo é o oposto da parte anterior:
identificação | Número_telefone | Tipo de telefone |
---|---|---|
1 | 11 | Telefone1 |
1 | 12 | Telefone2 |
2 | 21 | Telefone1 |
2 | 22 | Telefone2 |
identificação | Telefone1 | Telefone2 |
---|---|---|
1 | 11 | 12 |
2 | 21 | 23 |
Dependendo do objetivo, precisamos:
- Exclua as colunas Phone_num, Phone_type da tabela antiga e use seus elementos como os nomes das colunas da nova tabela
- Crie essas duas novas colunas Phone1, Phone2
- Preencha uma nova coluna com base em ID e 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;