none
Pivot no SQL 2005 com Inner Join RRS feed

  • Pergunta

  • Olá pessoal, preciso de uma ajuda para construir uma Query e se alguém puder me ajudar serei grato.

    Essa é a Query que traz o resultado logo abaixo (Imagem da Tabela)

    SELECT      Upper (INVENTTABLE.ITEMID) AS CÓDIGO_ITEM,

    Upper (INVENTTABLE.ITEMNAME) AS NOME_ITEM,

    Upper (INVENTTABLE.ITEMGROUPID) AS GRUPO_ITEM,

                Upper (INVENTITEMGROUP.NAME) AS GRUPO_ITEM_NOME,

    Upper (INVENTTABLEMODULE.UNITID) AS UNIDADE,

    INVENTTABLEMODULE.MODULETYPE) AS CODIGO_USO

    FROM              INVENTTABLE INNER JOIN

                          INVENTTABLEMODULE ON INVENTTABLE.ITEMID = INVENTTABLEMODULE.ITEMID AND

                          INVENTTABLE.DATAAREAID = INVENTTABLEMODULE.DATAAREAID INNER JOIN

                          INVENTITEMGROUP ON INVENTTABLE.ITEMGROUPID = INVENTITEMGROUP.ITEMGROUPID

    WHERE     (INVENTTABLE.DATAAREAID = 101) AND (INVENTTABLE.ITEMTYPE = 0)

    Resultado da Query acima

    Perceba que o ultimo campo “CODIGO_USO” que é um Alias do campo INVENTTABLEMODULE.MODULETYPE tem os valores 0, 1 e 2.

    Eu gostaria que os valores deste campo “CODIGO_USO” se transformassem em colunas e nessas colunas aparecessem os valores que estão no campo “UNIDADE” que é um Alias do campo INVENTTABLEMODULE.UNITID

    Dos 3 registros ficaria somente 1 e os valores (0, 1 e 2) se transformariam em colunas e os valores que estavam na coluna UNIDADE (G, KG e G), passariam para as colunas (0, 1 e 2) como valores.

    O retorno da Query ficaria assim

    Vocês podem me auxiliar na construção do código?

    Desde já deixo aqui meu muito obrigado a todos.

    Abraço,

    quarta-feira, 5 de setembro de 2012 16:31

Todas as Respostas

  • SELECT	CÓDIGO_ITEM,
    		NOME_ITEM,
    		GRUPO_ITEM,
    		GRUPO_ITEM_NOME,
    		[0],
    		[1],
    		[2]
    FROM(
    SELECT      Upper (INVENTTABLE.ITEMID) AS CÓDIGO_ITEM,
    Upper (INVENTTABLE.ITEMNAME) AS NOME_ITEM,
    Upper (INVENTTABLE.ITEMGROUPID) AS GRUPO_ITEM,
    Upper (INVENTITEMGROUP.NAME) AS GRUPO_ITEM_NOME,
    Upper (INVENTTABLEMODULE.UNITID) AS UNIDADE,
    INVENTTABLEMODULE.MODULETYPE) AS CODIGO_USO
    FROM              INVENTTABLE INNER JOIN
                          INVENTTABLEMODULE ON INVENTTABLE.ITEMID = INVENTTABLEMODULE.ITEMID AND
                          INVENTTABLE.DATAAREAID = INVENTTABLEMODULE.DATAAREAID INNER JOIN
                          INVENTITEMGROUP ON INVENTTABLE.ITEMGROUPID = INVENTITEMGROUP.ITEMGROUPID
    WHERE     (INVENTTABLE.DATAAREAID = 101) AND (INVENTTABLE.ITEMTYPE = 0)) A AS 
    PIVOT	(INVENTTABLEMODULE.UNITID for INVENTTABLEMODULE.MODULETYPE in ([0],[1],[2])) P

    Tente esse código acima. No blog de um dos usuários do fórum tem um exemplo: 

    Criando um Pivot Table no SQL Server

    quarta-feira, 5 de setembro de 2012 18:54