Mais
Converter eficientemente linhas em colunas no servidor sql
I'estou procurando uma maneira eficiente de converter linhas para colunas no servidor SQL, ouvi dizer que o PIVOT não é muito rápido, e preciso lidar com muitos registros.
Este é o meu exemplo:
-------------------------------
| Id | Value | ColumnName |
-------------------------------
| 1 | John | FirstName |
| 2 | 2.4 | Amount |
| 3 | ZH1E4A | PostalCode |
| 4 | Fork | LastName |
| 5 | 857685 | AccountNumber |
-------------------------------
Este é o meu resultado:
---------------------------------------------------------------------
| FirstName |Amount| PostalCode | LastName | AccountNumber |
---------------------------------------------------------------------
| John | 2.4 | ZH1E4A | Fork | 857685 |
---------------------------------------------------------------------
Como posso construir o resultado?
358
2
Há várias maneiras de transformar dados de várias linhas em colunas.
Utilizando
PIVOT
No SQL Server você pode utilizar a função
PIVOT
para transformar os dados de linhas para colunas:Veja Demonstração.
Pivô com número desconhecido de 'nomes de colunas'.
Se você tem um número desconhecido de 'nomes de colunas' que você quer transpor, então você pode utilizar SQL dinâmico:
Veja Demonstração.
Usando uma função agregada
Se você não quiser utilizar a função
PIVOT
, então você pode utilizar uma função agregada com uma expressãoCASE
:Veja Demo.
Usando múltiplas uniões
Isto também pode ser completado usando múltiplas junções, mas você precisará de alguma coluna para associar cada uma das linhas que você não tem nos seus dados de amostra. Mas a sintaxe básica seria:
como os dados pivotantes ainda estão quentes, decidi adicionar algo de mim. Este é mais um método do que apenas um script, mas dá-lhe muito mais possibilidades. Primeiro de tudo Há 3 scripts que você precisa implantar:
ColumnActionList
] -> mantém os dados como parâmetroproc_PivotPrepare
] -> prepara os nossos dadosproc_PivotExecute
] -> executar o script