none
2 PIVOT MESMO SQL RRS feed

  • Pergunta

  • Pessoal,

    Fiz uma store procedure que precisa retornar 2 pivot na mesma consulta , "funciono em parte" , ou seja quando eu executo um pivot por vez ele me traz apenas uma linha para cada produto de minha tabela, mas quando eu coloco para executar os 2 pivot na mesma coluna ele "perde o agrupamente"  como eu faço para ele manter agrupado

    segue instrução sql:

    WITH analiseVenda AS ( 
    	SELECT     DATA, CONVERT(NVARCHAR, DATA) + 'Conj' AS DATAC, ID_PRODUTO, SUM(QTDE) AS QTDE, SUM(QTDE_CONJUNTA) AS QTDE_CONJUNTA
    FROM         ANALISE_VENDA_PRODUTO
    GROUP BY DATA, ID_PRODUTO
    HAVING      (DATA >= CONVERT(DATETIME,'2013-05-01' , 102) AND DATA <= CONVERT(DATETIME,'2013-08-01', 102))
    )
    
    
    SELECT * FROM
    (SELECT     PRODUTO.ID_PRODUTO, PRODUTO.CODIGO, PRODUTO.UNIDADE_USO, ITEM_KANBAN.MEDIA_MES, ITEM_KANBAN.QTDE_ESTOQUE, 
                          ITEM_KANBAN.QTDE_PRODUCAO, ITEM_KANBAN.QTDE_ESTOQUE_BRUTO, ITEM_KANBAN.PEDIDO, ITEM_KANBAN.QTDE_SEPARADA, 
                          0 AS FATURADOS, GRUPO_PRODUTO.DESCRICAO AS GRUPO_PRODUTO, 0 AS MM5, 0 AS MM12, DATA, QTDE , DATAC, QTDE_CONJUNTA
    FROM         PRODUTO  LEFT OUTER JOIN analiseVenda 
                          ON PRODUTO.ID_PRODUTO = analiseVenda.ID_PRODUTO INNER JOIN
                          ITEM_KANBAN ON PRODUTO.ID_PRODUTO = ITEM_KANBAN.ID_PRODUTO INNER JOIN
                          GRUPO_PRODUTO ON PRODUTO.ID_GRUPO_PRODUTO = GRUPO_PRODUTO.ID_GRUPO
    WHERE     (PRODUTO.TIPO_PRODUTO = N'Produto') AND (ITEM_KANBAN.ID_KANBAN =1461) AND (CODIGO = '0028/1')                     
    GROUP BY GRUPO_PRODUTO.DESCRICAO, PRODUTO.CODIGO, PRODUTO.UNIDADE_USO,ITEM_KANBAN.MEDIA_MES, ITEM_KANBAN.QTDE_ESTOQUE, 
                          ITEM_KANBAN.QTDE_PRODUCAO, ITEM_KANBAN.QTDE_ESTOQUE_BRUTO, ITEM_KANBAN.PEDIDO, PRODUTO.ID_PRODUTO, 
                          ITEM_KANBAN.QTDE_SEPARADA,DATA, QTDE , DATAC, QTDE_CONJUNTA ) AS QUERY
    PIVOT (SUM(QTDE ) FOR DATA IN ([2013-05-01],[2013-06-01],[2013-07-01],[2013-08-01])) PIV1 
    PIVOT (SUM(QTDE_CONJUNTA ) FOR DATAC IN ([2013-05-01conj],[2013-06-01conj],[2013-07-01conj],[2013-08-01conj])) PIV2 

    Obrigado

    Charbel





    • Editado CharbelDaia segunda-feira, 9 de setembro de 2013 19:29 erro digitação
    segunda-feira, 9 de setembro de 2013 19:28

Respostas

Todas as Respostas

  • Deleted
    terça-feira, 10 de setembro de 2013 00:07
  • Deleted
    terça-feira, 10 de setembro de 2013 01:46
  • Jose, obrigado pela resposta

    Na verdade as colunas são dinâmicas eu coloquei estática para simplificar, ainda falta passar os parametros mais segue ela mais completa

    PROCEDURE [dbo].[usp_Orientativo_Vendas] 
    as BEGIN 
    
    
    DECLARE @COLUNAS VARCHAR(MAX);
    DECLARE @COLUNAS2 VARCHAR(MAX);
    DECLARE @SQLSTRING NVARCHAR(MAX);
    
    DECLARE @DATAINI NVARCHAR(20);
    DECLARE @DATAFIM NVARCHAR(20);
    DECLARE @IDKANBAN NVARCHAR(10);
    
    
    SET @DATAINI = '2013-05-01';
    SET @DATAFIM = '2013-09-01';
    SET @IDKANBAN = '1461';
    
    SET @COLUNAS = '';
    SET @COLUNAS2 = '';
    SET @SQLSTRING = '';
    -------------------------------------------------------------------------------------
    --------------------------------- CRIA AS COLUNAS -----------------------------------
    -------------------------------------------------------------------------------------
    SELECT @COLUNAS = COALESCE(@COLUNAS + '[' + (CAST(DATA AS NVARCHAR(MAX))) + '],','')  FROM ANALISE_VENDA_PRODUTO
    WHERE     (DATA >= CONVERT(DATETIME, @DATAINI, 102) AND DATA <= CONVERT(DATETIME, @DATAFIM, 102))
    GROUP BY DATA
    ORDER BY DATA
    
    SET @COLUNAS = LEFT (@COLUNAS, LEN(@COLUNAS)-1);
    
    SELECT @COLUNAS2 = COALESCE(@COLUNAS2 + '[' + (CAST(DATA AS NVARCHAR(MAX))) + ' CONJ],','')  FROM ANALISE_VENDA_PRODUTO
    WHERE     (DATA >= CONVERT(DATETIME, @DATAINI, 102) AND DATA <= CONVERT(DATETIME, @DATAFIM, 102))
    GROUP BY DATA
    ORDER BY DATA
    
    SET @COLUNAS2 = LEFT (@COLUNAS2, LEN(@COLUNAS2)-1);
    
    
    -------------------------------------------------------------------------------------
    --------------------------------- EXIBE RESULTADO -----------------------------------
    -------------------------------------------------------------------------------------
    
    SET @SQLSTRING = 'WITH analiseVenda AS ( 
    	SELECT     DATA, CONVERT(nvarchar, DATA) + N'' CONJ'' AS DATAC,  ID_PRODUTO, SUM(QTDE) AS QTDE, SUM(QTDE_CONJUNTA) AS QTDE_CONJUNTA
    FROM         ANALISE_VENDA_PRODUTO
    GROUP BY DATA,ID_PRODUTO
    HAVING      (DATA >= CONVERT(DATETIME,''2013-05-01'' , 102) AND DATA <= CONVERT(DATETIME,''2013-09-01'', 102))
    )
    
    SELECT  *
    FROM(
    SELECT     PRODUTO.ID_PRODUTO, PRODUTO.CODIGO, PRODUTO.UNIDADE_USO, ITEM_KANBAN.MEDIA_MES, ITEM_KANBAN.QTDE_ESTOQUE, 
                          ITEM_KANBAN.QTDE_PRODUCAO, ITEM_KANBAN.QTDE_ESTOQUE_BRUTO, ITEM_KANBAN.PEDIDO, ITEM_KANBAN.QTDE_SEPARADA, 
                          0 AS FATURADOS, GRUPO_PRODUTO.DESCRICAO AS GRUPO_PRODUTO, 0 AS MM5, 0 AS MM12, DATA, QTDE, DATAC, QTDE_CONJUNTA
    FROM         PRODUTO  LEFT OUTER JOIN analiseVenda 
                          ON PRODUTO.ID_PRODUTO = analiseVenda.ID_PRODUTO INNER JOIN
                          ITEM_KANBAN ON PRODUTO.ID_PRODUTO = ITEM_KANBAN.ID_PRODUTO INNER JOIN
                          GRUPO_PRODUTO ON PRODUTO.ID_GRUPO_PRODUTO = GRUPO_PRODUTO.ID_GRUPO
    WHERE     (PRODUTO.TIPO_PRODUTO = N''Produto'') AND (ITEM_KANBAN.ID_KANBAN =1461) AND (PRODUTO.CODIGO = ''0028/1'')                     
    GROUP BY GRUPO_PRODUTO.DESCRICAO, PRODUTO.CODIGO, PRODUTO.UNIDADE_USO,ITEM_KANBAN.MEDIA_MES, ITEM_KANBAN.QTDE_ESTOQUE, 
                          ITEM_KANBAN.QTDE_PRODUCAO, ITEM_KANBAN.QTDE_ESTOQUE_BRUTO, ITEM_KANBAN.PEDIDO, PRODUTO.ID_PRODUTO, 
                          ITEM_KANBAN.QTDE_SEPARADA, DATA, QTDE, DATAC, QTDE_CONJUNTA) AS QUERY
    PIVOT (SUM(QTDE) FOR DATA IN ('+ @COLUNAS +' )) PIV1
    PIVOT (SUM(QTDE_CONJUNTA) FOR DATAC IN ('+ @COLUNAS2 +' )) PIV2
    
    ' 
    
    EXEC (@SQLSTRING)
    
    END 

    terça-feira, 10 de setembro de 2013 14:05
  • Deleted
    • Marcado como Resposta Alysson Queiroz sexta-feira, 20 de setembro de 2013 14:38
    sábado, 14 de setembro de 2013 20:08