Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Girando uma tabela em SQL (ou seja, tabulação cruzada / tabulação cruzada)


Bill Karwin menciona isso, mas acho que isso merece ser apontado com muita clareza:

O SQL não faz o que você está pedindo, então qualquer "solução" que você obtiver será um kludge.

Se você sabe , com certeza, ele sempre será executado em um Oracle 10, então com certeza, a tabulação cruzada de Walter Mitty pode fazê-lo. A maneira correta de fazer isso é trabalhar a combinação mais fácil de ordem de classificação na consulta e no código do aplicativo para defini-lo corretamente.
  • Funciona em outros sistemas de banco de dados,
  • não há risco de nenhuma outra camada se degradar (lembro que o MySQL teve um problema com>255 colunas, por exemplo. Tem certeza de que biblioteca de interface lida bem como o próprio banco de dados?)
  • não é (geralmente) muito mais difícil.

Se precisar, basta pedir o Content_Row_ID s primeiro e, em seguida, peça as linhas necessárias, ordenadas por CampaignID , ContentRowID , que forneceria cada célula (preenchida) na ordem da esquerda para a direita, linha por linha.

Ps.

Há um monte de coisas que o homem moderno acha que o SQL deveria ter/fazer que simplesmente não existe. Este é um, intervalos gerados é outro, fechamento recursivo, paramétrico ORDER BY , linguagem de programação padronizada... a lista continua. (embora, admitamos, haja um truque para ORDER BY )