Usuário com melhor resposta
2 PIVOT MESMO SQL

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
Respostas
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 14 de setembro de 2013 16:33
- Marcado como Resposta Alysson Queiroz sexta-feira, 20 de setembro de 2013 14:38
-
Deleted
- Marcado como Resposta Alysson Queiroz sexta-feira, 20 de setembro de 2013 14:38
Todas as Respostas
-
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 14 de setembro de 2013 16:33
- Marcado como Resposta Alysson Queiroz sexta-feira, 20 de setembro de 2013 14:38
-
-
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
-
Deleted
- Marcado como Resposta Alysson Queiroz sexta-feira, 20 de setembro de 2013 14:38