none
Subtotal RRS feed

  • Pergunta

  • Amigos.

    Tenho a seguinte pesquisa:

    Estab. Deposito Produto Lote Data   Movto. Tipo   Movto. Qtde.
    1 99 10.000069      4 12/06/13 40 12,08
    1 99 10.000069      4 13/06/13 500 -12,08
    3 99 10.000069      4 13/06/13 200 12,08
    3 99 10.000069      4 20/06/13 501 -12,08
    3 98 10.000069      4 20/06/13 201 12,08
    3 98 10.000069      4 20/06/13 330 -6,448
    3 98 10.000069     

    4

    21/06/13

    330

    -0,08

    Presciso criar subtotais que fiquem desta maneira:

    Estab. Deposito Produto Lote Data   Movto. Tipo   Movto. Qtde.
    1 99 10.000069      4 12/06/13 40 12,08
    1 99 10.000069      4 13/06/13 500 -12,08
                0,000
    3 99 10.000069      4 13/06/13 200 12,08
    3 99 10.000069      4 20/06/13 501 -12,08
                0,000
    3 98 10.000069      4 20/06/13 201 12,08
    3 98 10.000069      4 20/06/13 330 -6,448
    3 98 10.000069      4 21/06/13 330 -0,08
               

    5,552

     O Subtotal deve ser por Estab/Deposito/Produto/Lote

    Tentei com subgrupo mas o resultado nao e mo esperado.

    Alguem tem uma solucao?

    Grato

    Eduardo

    segunda-feira, 29 de julho de 2013 13:45

Respostas

  • Boa tarde,

    Eduardo, acho que você também pode experimentar utilizando Grouping Sets conforme exemplo abaixo:

    SELECT
    	Estab,
    	Deposito,
    	Produto,
    	Lote,
    	DataMov,
    	SUM(Qtde) As Total
    FROM Tabela
    GROUP BY GROUPING SETS 
        ( (Estab, Deposito, Produto, Lote, DataMov, Qtde), 
          (Estab, Deposito, Produto, Lote) )
    

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 29 de julho de 2013 18:13

Todas as Respostas

  • Eduardo,

    Segue um exemplo de select:

    --Table creation and data load
    IF(OBJECT_ID('TabelaDeposito') IS NOT NULL)
    	DROP TABLE TabelaDeposito
    
    CREATE TABLE TabelaDeposito
    (
    	Estab		INT,
    	Deposito	INT,
    	Produto		VARCHAR(100),
    	Lote		INT,
    	DataMov		VARCHAR(100),
    	TipoMov		INT,
    	Qtde		DECIMAL(18,2)
    )
    
    INSERT INTO TabelaDeposito(Estab, Deposito, Produto, Lote, DataMov, TipoMov, Qtde) VALUES
    (1, 99, '10.000069', 4, '12/06/13', 40, 12.08),
    (1, 99, '10.000069', 4, '13/06/13', 500, -12.08),
    (3, 99, '10.000069', 4, '13/06/13', 200, 12.08),
    (3, 99, '10.000069', 4, '20/06/13', 501, -12.08),
    (3, 98, '10.000069', 4, '20/06/13', 201, 12.08),
    (3, 98, '10.000069', 4, '20/06/13', 330, -6.448),
    (3, 98, '10.000069', 4, '21/06/13', 330, -0.08)
    
    
    --Final select
    SELECT *
    FROM
    (
    	SELECT
    		Estab,
    		Deposito,
    		Produto,
    		Lote,
    		DataMov,
    		--TipoMov,
    		--Qtde,
    		SUM(Qtde) As Total
    	FROM TabelaDeposito
    	GROUP BY CUBE(Estab, Deposito, Produto, Lote, DataMov)
    ) a
    WHERE 
    	(a.Estab IS NOT NULL AND a.Deposito IS NOT NULL AND a.Produto IS NOT NULL AND a.Lote IS NOT NULL AND a.DataMov IS NOT NULL)
    	OR
    	(a.Estab IS NOT NULL AND a.Deposito IS NOT NULL AND a.Produto IS NOT NULL AND a.Lote IS NOT NULL AND a.DataMov IS NULL)
    ORDER BY a.Estab, a.Deposito, a.Produto, a.Lote


    <b>Fabrizzio A. Caputo</b><br/> Certificações:<br/> MCT<br/> MCC<br/> Oracle OCA 11g<br/> MCITP SQL Server 2008 BI<br/> MCITP SQL Server 2008 Implementation and Maintenance<br/> MCITP SQL Server 2008 Developer<br/> ITIL V3 Foundation <br/> Blog Pessoal: <a href="http://fabrizziocaputo.wordpress.com">www.fabrizziocaputo.wordpress.com</a><br/> Email: fabrizzio.antoniaci@gmail.com

    segunda-feira, 29 de julho de 2013 14:03
    Moderador
  • Bom dia minha maneira pode ser a não adequada mas cheguei no resultado fazendo dessa forma.

    DECLARE  @tblExtrato AS TABLE(Estab INT, 
    							  Deposito INT, 
    							  Produto VARCHAR(20), 
    							  Lote INT,
    							  DataMov DATETIME,
    							  TipoMov INT,
    							  Qtde FLOAT )
    							  
    
    INSERT @tblExtrato VALUES (1,99,'10.000069',4,'12-06-2013',40,12.08),
    						  (1,99,'10.000069',4,'13-06-2013',500,-12.08),
    						  (3,99,'10.000069',4,'13-06-2013',200,12.08),
    						  (3,99,'10.000069',4,'20-06-2013',501,-12.08),
    						  (3,98,'10.000069',4,'20-06-2013',201,12.08),
    						  (3,98,'10.000069',4,'20-06-2013',330,-6.448),
    						  (3,98,'10.000069',4,'21-06-2013',330,-0.08)
    
    
    ;WITH Extrato
    AS
    ( SELECT Estab,Deposito,Produto,Lote,DataMov,TipoMov,Qtde FROM @tblExtrato)
    ,
    TotalExtrato AS (SELECT Estab,Deposito,SUM(Qtde) AS Qtde FROM Extrato
     GROUP BY Estab,Deposito)
    
    
    
    SELECT * FROM Extrato WHERE Estab = 1 AND Deposito=99
    UNION ALL 
    SELECT NULL,NULL,NULL,NULL,NULL,NULL,Qtde FROM TotalExtrato WHERE Estab = 1 AND Deposito = 99
    UNION ALL
    SELECT * FROM Extrato WHERE Estab = 3 AND Deposito=99
    UNION ALL 
    SELECT NULL,NULL,NULL,NULL,NULL,NULL,Qtde FROM TotalExtrato WHERE Estab = 3 AND Deposito = 99
    UNION ALL
    SELECT * FROM Extrato WHERE Estab = 3 AND Deposito=98
    UNION ALL 
    SELECT NULL,NULL,NULL,NULL,NULL,NULL,Qtde FROM TotalExtrato WHERE Estab = 3 AND Deposito = 98


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    segunda-feira, 29 de julho de 2013 14:25
  • Bom dia minha maneira pode ser a não adequada mas cheguei no resultado fazendo dessa forma.

    DECLARE  @tblExtrato AS TABLE(Estab INT, 
    							  Deposito INT, 
    							  Produto VARCHAR(20), 
    							  Lote INT,
    							  DataMov DATETIME,
    							  TipoMov INT,
    							  Qtde FLOAT )
    							  
    
    INSERT @tblExtrato VALUES (1,99,'10.000069',4,'12-06-2013',40,12.08),
    						  (1,99,'10.000069',4,'13-06-2013',500,-12.08),
    						  (3,99,'10.000069',4,'13-06-2013',200,12.08),
    						  (3,99,'10.000069',4,'20-06-2013',501,-12.08),
    						  (3,98,'10.000069',4,'20-06-2013',201,12.08),
    						  (3,98,'10.000069',4,'20-06-2013',330,-6.448),
    						  (3,98,'10.000069',4,'21-06-2013',330,-0.08)
    
    
    ;WITH Extrato
    AS
    ( SELECT Estab,Deposito,Produto,Lote,DataMov,TipoMov,Qtde FROM @tblExtrato)
    ,
    TotalExtrato AS (SELECT Estab,Deposito,SUM(Qtde) AS Qtde FROM Extrato
     GROUP BY Estab,Deposito)
    
    
    
    SELECT * FROM Extrato WHERE Estab = 1 AND Deposito=99
    UNION ALL 
    SELECT NULL,NULL,NULL,NULL,NULL,NULL,Qtde FROM TotalExtrato WHERE Estab = 1 AND Deposito = 99
    UNION ALL
    SELECT * FROM Extrato WHERE Estab = 3 AND Deposito=99
    UNION ALL 
    SELECT NULL,NULL,NULL,NULL,NULL,NULL,Qtde FROM TotalExtrato WHERE Estab = 3 AND Deposito = 99
    UNION ALL
    SELECT * FROM Extrato WHERE Estab = 3 AND Deposito=98
    UNION ALL 
    SELECT NULL,NULL,NULL,NULL,NULL,NULL,Qtde FROM TotalExtrato WHERE Estab = 3 AND Deposito = 98


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    Davi,

    O problema desta solução é que ela é engessada, ou seja, se entrar um novo estabelecimento por exemplo será necessário atualizar essa query.


    <b>Fabrizzio A. Caputo</b><br/> Certificações:<br/> MCT<br/> MCC<br/> Oracle OCA 11g<br/> MCITP SQL Server 2008 BI<br/> MCITP SQL Server 2008 Implementation and Maintenance<br/> MCITP SQL Server 2008 Developer<br/> ITIL V3 Foundation <br/> Blog Pessoal: <a href="http://fabrizziocaputo.wordpress.com">www.fabrizziocaputo.wordpress.com</a><br/> Email: fabrizzio.antoniaci@gmail.com

    segunda-feira, 29 de julho de 2013 14:33
    Moderador
  • Obrigado Fabrizzio , por isso citei que pode ser a não adequada. Até porque mesmo o CUBE que de fato é o mais viável ainda assim não traz exatamente o resultado esperado como o nosso amigo Eduardo tinha colocado.


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    segunda-feira, 29 de julho de 2013 14:38
  • Boa tarde,

    Eduardo, acho que você também pode experimentar utilizando Grouping Sets conforme exemplo abaixo:

    SELECT
    	Estab,
    	Deposito,
    	Produto,
    	Lote,
    	DataMov,
    	SUM(Qtde) As Total
    FROM Tabela
    GROUP BY GROUPING SETS 
        ( (Estab, Deposito, Produto, Lote, DataMov, Qtde), 
          (Estab, Deposito, Produto, Lote) )
    

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 29 de julho de 2013 18:13
  • Fabrizzio,

    Obrigado pela resposta.

    Estou adequando sua proposta em meu relatorio.

    So encontrei um problema.

    Ao adicionar o campo TIPO_MOVTO, que e bastante importante, o resultado, que ate o momento estava correto, passa a demonstrar varias linhas para o mesmo Estab/Deposito.

    Voce sabe me informar o motivo desta alteracao?

    Grato

    Eduardo

    segunda-feira, 29 de julho de 2013 18:41
  • Davi,

    Obrigado pela sua proposta.

    Vou testa-la em meu relatorio

    Grato

    Eduardo

    segunda-feira, 29 de julho de 2013 18:42
  • gapimex,

    Obrigado pela sua proposta.

    Vou testa-la em meu relatorio

    Grato

    Eduardo

    segunda-feira, 29 de julho de 2013 19:40