(Banco de dados) Linha para coluna (não dinâmico), coluna para linha (pivot) em SQL

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:

  1. Crie duas novas colunas Phone_num, Phone_type
  2. Exclua as colunas Phone1, Phone2 da tabela antiga e use seus nomes de coluna como elementos da nova coluna Phone_type
  3. 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:

  1. Exclua as colunas Phone_num, Phone_type da tabela antiga e use seus elementos como os nomes das colunas da nova tabela
  2. Crie essas duas novas colunas Phone1, Phone2
  3. 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;

Acho que você gosta

Origin blog.csdn.net/weixin_43728138/article/details/123635563
Recomendado
Clasificación