SQL Server PIVOT
Definição do Problema
Recentemente, neste tópico eu ajudei a resolver um problema relativamente simples. Vou citar minha solução e, em seguida, explicar o principal problema que as pessoas costumam encontrar em soluções PIVOT.
;WITH CTE_STC_DETAIL_CODES AS
(
SELECT
[Code_V_2].[CODE_CAT],
[Code_V_2].[DESCRIPTION]
FROM [dbo].[STC_Detail]
INNER JOIN [STC_Header_V_2]
ON [STC_Header_V_2].[STCID] = [STC_Detail].[STCID]
INNER JOIN [STC_Code]
ON [STC_Code].[STCDTLID] = [STC_Detail].[STCDTLID]
INNER JOIN [Code_V_2]
ON [Code_V_2].[CodeID] = [STC_Code].[CodeID]
WHERE [STC_Header_V_2].[STC] = '33 '
)
SELECT [STCDTLID],
[SN] AS 'Sub Net',
[NT] AS 'Network Indicator',
[CV] AS 'Coverage Level',
[TQ] AS 'Time Period Qualifier',
[AI] AS 'Authorization Indicator',
[CS] AS 'Cost Share Type',
[IC] AS 'Insurance Certificate Code',
[QQ] AS 'Quantity Qualifier Code'
FROM CTE_STC_DETAIL_CODES
PIVOT
(
MAX([DESCRIPTION])
FOR CODE_CAT IN
(
[SN],
[NT],
[CV],
[TQ],
[AI],
[CS],
[IC],
[QQ]
)) AS Pvt
Problema Comum
A solução de PIVOT por si só não é complexa, é apenas um PIVOT estático simples. Mas o autor do tópico estava tendo um problema de chegar a ele. O principal problema é entender que todas as colunas que não são mencionadas na função agregada PIVOT da cláusula PIVOT serão agregadas, por isso se há uma coluna com valores exclusivos na tabela de origem para o PIVOT e não é mencionada no cláusula PIVOT, será uma fonte de agregação e, portanto o resultado não terá tantas linhas como você tem colunas exclusivas na tabela derrotando o principal objetivo do PIVOT.
Isso é algo que eu queria enfatizar.
Outros Blogs
Há dois tópicos que podem ajudar você a compreender melhor PIVOT:
Entendendo SQL Server 2000 Pivot com Agregação por George Mastros
e também tópico no blog de Naomi N. que é um pouco mais avançado:
PIVOT Dinâmico sobre múltiplas colunas
Este artigo participou do prêmio TechNet WiKi Guru de Maio/2013 e venceu com medalha de Ouro.
Veja Também
Outros Idiomas
Este artigo também está disponível nos seguintes idiomas: