none
Union resultado na mesma linha RRS feed

  • Pergunta

  • Bom dia,

    Galera!

    Será que podem ajudar nesta consulta, fiz o seguinte union porém o resultado está trazendo em duas linhas e preciso que venha em única linha, segue abaixo exemplo:

    Select 
    	P.PRODCODESTR As CodProduto, 
    	P.PRODNOME As NomeProduto,	
    	SUM(IME.ItMovEstqQtdProd) As 'QtdEntrada',
    	0 As QtdSaida,
    	Saldo_Atual = (SELECT Top 1 SaldoEstqDataQtd FROM SALDO_ESTQ_DATA S  WITH(NOLOCK) WHERE  P.ProdCodEstr = S.ProdCodEstr    And S.SaldoEstqData >= '20160701' And S.SaldoEstqData <= '20160710' and  S.EmpCod = '1' order by SaldoEstqData desc )
    	
    From 
    	PRODUTO P WITH(NOLOCK), 
        ITEM_MOV_ESTQ IME WITH(NOLOCK),
        Mov_Estq ME WITH(NOLOCK),
        TIPO_LANC TL WITH(NOLOCK)
    
    Where	
    	
         TL.TIPOLANCOPER ='Entrada'
    And  ME.MovEstqDataEmissao>= '20160701' 
    And  ME.MovEstqDataEmissao<= '20160710'
    And  P.ProdCodEstr in ('12.01.0008','12.01.0071','12.01.0011','12.01.0010','12.01.0003','12.01.0046','12.01.0043','12.01.0068','12.01.0069','12.01.0070',
                           '12.01.0078','12.01.0009','12.01.0035','12.01.0089','12.01.0036','12.01.0012','15.20.0032','15.20.0033','15.20.0047','15.20.0048',
                           '15.20.0088','15.20.0099','12.01.0042','12.01.0116','15.20.0118','15.20.0119')
    And	 ME.MovEstqChv = IME.MovEstqChv
    And  TL.TipoLancCod = ME.TipoLancCod
    And  IME.ProdCodEstr = P.ProdCodEstr
    
    Group By
    	P.PRODCODESTR, 
    	P.PRODNOME
    
    	
    
    UNION ALL
    
    Select 
    	P1.PRODCODESTR , 
    	P1.PRODNOME ,
    	0,
    	SUM(IME1.ItMovEstqQtdProd),
    	Saldo_Atual = (SELECT Top 1 SaldoEstqDataQtd FROM SALDO_ESTQ_DATA S  WITH(NOLOCK) WHERE  P1.ProdCodEstr = S.ProdCodEstr    And S.SaldoEstqData >= '20160701' And S.SaldoEstqData <= '20160710' and  S.EmpCod = '1' order by SaldoEstqData desc ) 
    	
    
    From 
    	PRODUTO P1 WITH(NOLOCK), 
        ITEM_MOV_ESTQ IME1 WITH(NOLOCK),
        Mov_Estq ME1 WITH(NOLOCK),
        TIPO_LANC TL1 WITH(NOLOCK)
    
    Where	
    	
         TL1.TIPOLANCOPER ='Saida'
    And  ME1.MovEstqDataEmissao>= '20160701' 
    And  ME1.MovEstqDataEmissao<= '20160710'
    And  P1.ProdCodEstr in ('12.01.0008','12.01.0071','12.01.0011','12.01.0010','12.01.0003','12.01.0046','12.01.0043','12.01.0068','12.01.0069','12.01.0070',
                           '12.01.0078','12.01.0009','12.01.0035','12.01.0089','12.01.0036','12.01.0012','15.20.0032','15.20.0033','15.20.0047','15.20.0048',
                           '15.20.0088','15.20.0099','12.01.0042','12.01.0116','15.20.0118','15.20.0119')
    And	 ME1.MovEstqChv = IME1.MovEstqChv
    And  TL1.TipoLancCod = ME1.TipoLancCod
    And  IME1.ProdCodEstr = P1.ProdCodEstr
    
    Group By
    	P1.PRODCODESTR, 
    	P1.PRODNOME
    
    	
    Order By 
    	P.ProdCodEstr
    	
    

    quinta-feira, 18 de agosto de 2016 13:12

Respostas

Todas as Respostas

  • Deleted
    quinta-feira, 18 de agosto de 2016 13:19
  • José, Bom dia!

    Obrigado mais uma vez, realmente ficou bem melhor desta forma.

    quinta-feira, 18 de agosto de 2016 13:27
  • Deleted
    quinta-feira, 18 de agosto de 2016 13:35
  • José a deixa te fazer outra pergunta referente a esta mesma query:

    Está restrição são os códigos dos produtos, verifiquei a consulta e está rápido a execução, é possível trazer zero mesmo que não houve movimentação em algum campo contendo baseado nestes produtos da restrição

    Agora a consutlta está desta forma:

    Select 
    P.PRODCODESTR As CodProduto, 
    P.PRODNOME As NomeProduto,
    Saldo_Anterior = (SELECT Top 1 SaldoEstqDataQtd FROM SALDO_ESTQ_DATA S  WITH(NOLOCK) WHERE  P.ProdCodEstr = S.ProdCodEstr    And S.SaldoEstqData < '20160701'  and  S.EmpCod = '1' order by SaldoEstqData desc ),
    SUM(Case When TL.TIPOLANCOPER ='Entrada' Then IME.ItMovEstqQtdProd Else 0 End) As 'QtdEntrada',
        SUM(Case When TL.TIPOLANCOPER ='Saida' Then IME.ItMovEstqQtdProd Else 0 End) As 'QtdSaida',
    Saldo_Atual = (SELECT Top 1 SaldoEstqDataQtd FROM SALDO_ESTQ_DATA S  WITH(NOLOCK) WHERE  P.ProdCodEstr = S.ProdCodEstr    And S.SaldoEstqData >= '20160701' And S.SaldoEstqData <= '20160710' and  S.EmpCod = '1' order by SaldoEstqData desc )

    From 
    PRODUTO P WITH(NOLOCK), 
        ITEM_MOV_ESTQ IME WITH(NOLOCK),
        Mov_Estq ME WITH(NOLOCK),
        TIPO_LANC TL WITH(NOLOCK)

    Where


         ME.MovEstqDataEmissao>= '20160701' 
    And  ME.MovEstqDataEmissao<= '20160710'
    And  P.ProdCodEstr in ('12.01.0008','12.01.0071','12.01.0011','12.01.0010','12.01.0003','12.01.0046','12.01.0043','12.01.0068','12.01.0069','12.01.0070',
                           '12.01.0078','12.01.0009','12.01.0035','12.01.0089','12.01.0036','12.01.0012','15.20.0032','15.20.0033','15.20.0047','15.20.0048',
                           '15.20.0088','15.20.0099','12.01.0042','12.01.0116','15.20.0118','15.20.0119')
    And ME.MovEstqChv = IME.MovEstqChv
    And  TL.TipoLancCod = ME.TipoLancCod
    And  IME.ProdCodEstr = P.ProdCodEstr

    Group By
    P.PRODCODESTR, 
    P.PRODNOME

    

     

    quinta-feira, 18 de agosto de 2016 14:03
  • Deleted
    quinta-feira, 18 de agosto de 2016 14:39
  • Eu já havia feito com left mas não traz todos os registros, pelo teste que fiz o problema está no Group By
    quinta-feira, 18 de agosto de 2016 16:08
  • Deleted
    quinta-feira, 18 de agosto de 2016 16:31
  • ME.TipoLancCod  uso para fazer junção com a ME.TipoLancCod e TL.TIPOLANCOPER definir se é entrada ou saída, mesmo alterando o as junções da cláusula Where não traz todos os registros, 

    Select 
    	P.PRODCODESTR As CodProduto,
    	P.PRODNOME As NomeProduto,
        Saldo_Anterior = (SELECT Top 1 SaldoEstqDataQtd FROM SALDO_ESTQ_DATA S  WITH(NOLOCK) WHERE  P.ProdCodEstr = S.ProdCodEstr    And S.SaldoEstqData < '20160701'  and  S.EmpCod = '1' order by SaldoEstqData desc ),
    	SUM(Case When TL.TIPOLANCOPER ='Entrada' Then IME.ItMovEstqQtdProd Else 0 End) As 'QtdEntrada',
        SUM(Case When TL.TIPOLANCOPER ='Saida' Then IME.ItMovEstqQtdProd Else 0 End) As 'QtdSaida',
    	Saldo_Atual = (SELECT Top 1 SaldoEstqDataQtd FROM SALDO_ESTQ_DATA S  WITH(NOLOCK) WHERE  P.ProdCodEstr = S.ProdCodEstr    And S.SaldoEstqData >= '20160701' And S.SaldoEstqData <= '20160710' and  S.EmpCod = '1' order by SaldoEstqData desc )
    
    
    From 
                   	  PRODUTO P
            left join ITEM_MOV_ESTQ IME on IME.ProdCodEstr = P.ProdCodEstr
            left join Mov_Estq ME on ME.MovEstqChv = IME.MovEstqChv
            left join TIPO_LANC TL on TL.TipoLancCod = ME.TipoLancCod
    
    Where	
    	
             (ME.MovEstqDataEmissao is null or
            (ME.MovEstqDataEmissao>= '20160701' And ME.MovEstqDataEmissao<= '20160710'))
    And  P.ProdCodEstr in ('12.01.0008','12.01.0071','12.01.0011','12.01.0010','12.01.0003','12.01.0046','12.01.0043','12.01.0068','12.01.0069','12.01.0070',
                           '12.01.0078','12.01.0009','12.01.0035','12.01.0089','12.01.0036','12.01.0012','15.20.0032','15.20.0033','15.20.0047','15.20.0048',
                           '15.20.0088','15.20.0099','12.01.0042','12.01.0116','15.20.0118','15.20.0119')
    --And	 ME.MovEstqChv = IME.MovEstqChv
    --And  TL.TipoLancCod = IME.TipoLancCod
    --And  IME.ProdCodEstr = P.ProdCodEstr
    
    Group By
    	P.PRODCODESTR ,
    	P.PRODNOME 

    quinta-feira, 18 de agosto de 2016 16:48
  • Deleted
    quinta-feira, 18 de agosto de 2016 19:10
  • Obrigado mais uma vez José, ficou perfeito desta forma.

    abs,

    quinta-feira, 18 de agosto de 2016 19:46
  • Deleted
    sexta-feira, 19 de agosto de 2016 10:26