none
Consulta com Union RRS feed

  • Pergunta

  • Bom dia,

    Galera!

    Preciso de uma ajuda nesta consulta, preciso que retorne  as colunas quantidadeantes e quantidadefinal em um só linha, segue o select e imagem como exemplo:

    Select 

    P.ProdCodEstr,
    P.ProdNome,
    IME.ItMovEstqUnidMedCod,

     Convert(varchar (100), IME.ItMovEstqQtdProd)  as QuantidadeAntes,
    '' as quantidadefinal

    From 
    ITEM_MOV_ESTQ IME  left Join Produto P ON P.ProdCodEstr =  IME.ProdCodEstr


    Where IME.MovEstqChv in ('569690','569794')
    and IME.ProdCodEstr  = '11.01.0030'
    and IME.TipoLancCod = 'E0000072'

    Union 

    Select 

    P.ProdCodEstr,
    P.ProdNome,
    IME.ItMovEstqUnidMedCod,
    '', 
    Convert(varchar (100), IME.ItMovEstqQtdProd)  
    From 
    ITEM_MOV_ESTQ IME  left Join Produto P ON P.ProdCodEstr =  IME.ProdCodEstr


    Where IME.MovEstqChv in ('569690','569794')
    and IME.ProdCodEstr  = '11.01.0030'
    and IME.TipoLancCod = 'E0000013'

    Group By 
    P.ProdCodEstr,
    P.ProdNome,
    IME.ItMovEstqUnidMedCod,
    IME.ItMovEstqQtdProd

    Obrigado,

    abs,

    Leandro Massena

    quarta-feira, 22 de abril de 2015 13:23

Respostas

Todas as Respostas

  • Deleted
    quarta-feira, 22 de abril de 2015 13:40
  • Bom dia,

    Experimente dessa forma:

    Select 
        P.ProdCodEstr,
        P.ProdNome,
        IME.ItMovEstqUnidMedCod,
        sum(case when IME.TipoLancCod = 'E0000072' then IME.ItMovEstqQtdProd else 0 end) as QuantidadeAntes,
        sum(case when IME.TipoLancCod = 'E0000073' then IME.ItMovEstqQtdProd else 0 end) as quantidadefinal
    From ITEM_MOV_ESTQ IME  
    left Join Produto P 
        ON P.ProdCodEstr =  IME.ProdCodEstr
    Where 
        IME.MovEstqChv in ('569690','569794') and 
        IME.ProdCodEstr  = '11.01.0030' and 
        IME.TipoLancCod in ('E0000072', 'E0000073')
    group by
        P.ProdCodEstr,
        P.ProdNome,
        IME.ItMovEstqUnidMedCod

    Espero que ajude.


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

    quarta-feira, 22 de abril de 2015 13:40
  • Neste caso nao é um UNION e sim um JOIN

    Select A.ProdCodEstr, A.ProdNome, A.ItMovEstqUnidMedCod,A.QuantidadeAntes,B.quantidadefinal
    from (
    
    Select 
    
    P.ProdCodEstr,
    P.ProdNome,
    IME.ItMovEstqUnidMedCod,
    
     Convert(varchar (100), IME.ItMovEstqQtdProd)  as QuantidadeAntes
    From 
    ITEM_MOV_ESTQ IME  left Join Produto P ON P.ProdCodEstr =  IME.ProdCodEstr
    
    
    Where IME.MovEstqChv in ('569690','569794')
    and IME.ProdCodEstr  = '11.01.0030'
    and IME.TipoLancCod = 'E0000072') A
    inner join 
    (
    Select 
    P.ProdCodEstr,
    Convert(varchar (100), IME.ItMovEstqQtdProd)   as quantidadefinal
    From 
    ITEM_MOV_ESTQ IME  left Join Produto P ON P.ProdCodEstr =  IME.ProdCodEstr
    
    
    Where IME.MovEstqChv in ('569690','569794')
    and IME.ProdCodEstr  = '11.01.0030'
    and IME.TipoLancCod = 'E0000013')B
    
    Order by
    A.ProdCodEstr,
    A.ProdNome

    O union sempre vai criar registros para cada braço do UNION, portanto  querys como essa

    Select 1 UNION select 2, vai criar duas linhas,

    ja query como esta

    Select A.ID,A.qtde, B.qtde from (Select 1 as id,1 qtde) A INNER JOIN (select 1 as id,2 as qtde )B  on a.id=b.id

    Vai criar uma linha apenas

    Mas no seu caso, a resposta do GAMIPEX seria a mais indicada.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    quarta-feira, 22 de abril de 2015 13:41
  • Bom dia,

    gapimex

    Desta forma retorna a coluna quantidadefinal com valor 0 e deveria retorna o valor de 28,10000 exemplo da imagem,

    abs,

    Leandro Massena

    quarta-feira, 22 de abril de 2015 14:10
  • É porque o filtro esta errado..

    O gamipex escreveu o codigo assim:

    sum(case when IME.TipoLancCod = 'E0000073' then IME.ItMovEstqQtdProd else 0 end) as quantidadefinal

    e o correto é

    sum(case when IME.TipoLancCod = 'E0000013' then IME.ItMovEstqQtdProd else 0 end) as quantidadefinal

     E0000013 no lugar de E0000073.

    e nesta parte tambem

     IME.TipoLancCod in ('E0000072', 'E0000073')

    o correto é

     IME.TipoLancCod in ('E0000072', 'E0000013')

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    quarta-feira, 22 de abril de 2015 14:22
  • Experimente corrigir o código que está na clausula Where da query que sugeri:

        IME.TipoLancCod in ('E0000072', 'E0000013')

    Espero que ajude.


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

    quarta-feira, 22 de abril de 2015 14:23
  • Bom dia

    William!

    Realmente não havia me atentado neste detalhe, fiz da forma que indicou e consegui chegar no resultado que esperava, obrigado,

    abs,

    Leandro Massena,

    quarta-feira, 22 de abril de 2015 14:29
  • José, Bom dia!

    Desta forma também consegui chegar no resultado esperado, obrigado,

    abs,

    Leandro Massena,

    quarta-feira, 22 de abril de 2015 14:30
  • Deleted
    quarta-feira, 22 de abril de 2015 16:44
  • Bom dia

    Jose!

    Não é necessário o Group By na consulta pois não tem nenhuma função de agregação.

    Obrigado,

     

    segunda-feira, 27 de abril de 2015 14:20
  • Deleted
    segunda-feira, 27 de abril de 2015 14:52