Compartilhar via


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: