Estou PIVOT
criando uma tabela de forma que os nomes das colunas na tabela final sejam baseados no "nome da organização" na tabela de origem. O problema é que o "nome da organização" é controlado por dados e pode ser qualquer conjunto de valores; Eu uso SQL dinâmico para construir a cláusula PIVOT
's . IN
Isso significa que o valor pode corresponder a outro nome de coluna que tenho, como a RecordId
que estou girando. Então eu tenho algo assim:
.----------------------------------------------------------------------.
| RecordId | OrganizationFoo | OrganizationBar | OrganizationBaz | ... |
|----------|-----------------|-----------------|-----------------|-----|
| 123 | 182 | 76 | 56 | ... |
| 234 | 846 | 0 | 182 | ... |
| 345 | 46 | 2 | 951 | ... |
...
O problema é que tudo isso é orientado a dados, portanto, seria bom que o nome de uma organização fosse RecordId
, o que causaria a geração de uma consulta SQL inválida devido a colunas duplicadas. Existe uma maneira de prefixar automaticamente algo para cada coluna na PIVOT
saída?
Se não, as únicas 3 maneiras que posso pensar em fazer isso são:
- Em vez disso, selecione
CONCAT('Prefix_', [OrgName])
, mas isso provavelmente reduzirá a eficiência porque[OrgName]
é indexado. - Crie uma tabela duplicada para aquela que contém
[OrgName]
, e cada vez que esta consulta for executada, limpe-a e insira o conteúdo da tabela original, mas com[OrgName]
o prefixo. - Apenas armazene sempre
[OrgName]
com o prefixo em primeiro lugar.
Alguma opção mais limpa/melhor?
O uso do índice parece irrelevante para a concatenação.
As outras 2 soluções são estranhas.
Demonstração