Estou usando uma plataforma que aceita funções SQL mínimas para escrever um código SQL. A função UNPIVOT não pode ser usada na plataforma, então tenho que fazer isso manualmente. Estou pensando na linha de UNION ALL e depois CROSS JOINING (que tentei, mas acabei com a contagem de registros errada. Por favor, veja a imagem em anexo.
Qualquer ajuda / ponteiro será muito apreciada!
Você pode usar um cross join
, mas requer alguma case
lógica. A sintaxe exata depende do banco de dados, mas algo assim:
select t.col1, t.col2,
(case when n.n = 1 then t.col3 else t.col4 end) as newcol
from t cross join
(select 1 as n union all select 2) n;
Para carregar outra tabela, você faria o seguinte:
insert
esses resultados em uma tabela que já foi criada.select into
ou create table as
dependendo do banco de dados.Se você se preocupa com o pedido, pode adicionar order by t.col1, t.col2, n.n
.
Na maioria dos casos, uma union all
abordagem simples é adequada (como sugere o GMB). Essa abordagem requer a varredura da tabela duas vezes, o que incorre em alguma sobrecarga adicional. No entanto, se a "tabela" for realmente uma consulta ou visualização complexa, processá-la apenas uma vez é uma vantagem maior.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras