none
Union RRS feed

  • Pergunta

  • Bom dia,

    Galera!

    Estou com o seguinte problema, veja se alguém consegue ajudar, tenho que fazer  o Union abaixo porém ao rodar as querys separadas traz o resultado correto mas ao rodar com o  Union da o seguinte erro 

    "Error converting data type varchar to numeric".

    Select 
         A.FicTecProdCodEstr, 
         B.Prodnome,
         SUM(Ela.EstqLocArmazQtd) As SaldoMatPrim,
         A.ProdCodEstr, 
         C.ProdNome As Produto,
         ''
      
    From 
    			   Fic_Tec_Prod A with(nolock) 
        Inner join Produto B With(Nolock) ON A.FicTecProdCodEstr = B.ProdCodEstr
        Inner join produto C With(Nolock) ON C.ProdCodEstr = A.ProdCodEstr
    	Inner Join ESTQ_LOC_ARMAZ ELA With(Nolock) ON ELA.ProdCodEstr = A.FicTecProdCodEstr
        
    	
    Where 
    
    		 B.ProdCodEstr >= '13.04.0026'
        And  B.ProdCodEstr <= '13.04.0026'
        And  B.prodstat = 'Ativado'
        And (B.ProdDataValidFim is Null or B.ProdDataValidFim > getdate())
        And  C.prodstat = 'Ativado'
        And (A.fictecproddatafim Is null or a.fictecproddatafim > getdate())
        And  C.ProdDataValidFim Is null
    
    
    Group By
         A.FicTecProdCodEstr, 
         B.Prodnome,
         A.ProdCodEstr, 
         C.ProdNome
    
    
    Union 
    
    
    Select 
        '',
        '',
        '',
        '',
        '',
        SUM(Ela1.EstqLocArmazQtd/Pum.ProdUnidMedPeso) As QtdCaixa
    From 
    			   Fic_Tec_Prod A1 with(nolock) 
        Inner join Produto B1 With(Nolock) ON A1.FicTecProdCodEstr = B1.ProdCodEstr
        Inner join produto C1 With(Nolock) ON C1.ProdCodEstr = A1.ProdCodEstr
    	Inner Join ESTQ_LOC_ARMAZ ELA1 With(Nolock) ON ELA1.ProdCodEstr = A1.ProdCodEstr
        Inner Join PROD_UNID_MED PUM  With(Nolock) ON  PUM.ProdCodEstr = B1.ProdCodEstr
    	
    Where 
    
    		 B1.ProdCodEstr >= '13.04.0026'
        And  B1.ProdCodEstr <= '13.04.0026'
        And  B1.prodstat = 'Ativado'
        And (B1.ProdDataValidFim is Null or B1.ProdDataValidFim > getdate())
        And  C1.prodstat = 'Ativado'
        And (A1.fictecproddatafim Is null or a1.fictecproddatafim > getdate())
        And  C1.ProdDataValidFim Is null
    
    
    Group By
         A1.FicTecProdCodEstr, 
         B1.Prodnome,
         A1.ProdCodEstr, 
         C1.ProdNome 
    
    Obrigado.

    segunda-feira, 14 de março de 2016 14:40

Respostas

  • Bom dia,

    Leandro, o tipo de dados de todas as colunas retornadas pelas 2 querys deve ser compatível.

    Acho que no seu caso você pode trocar o espaço em branco por null ou zero quando o tipo de dados é numérico, ou manter o espaço em branco e converter o valor numérico para Varchar.

    Espero que ajude


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

    • Sugerido como Resposta Antero Marques segunda-feira, 14 de março de 2016 15:10
    • Marcado como Resposta Marcos SJ segunda-feira, 14 de março de 2016 17:12
    segunda-feira, 14 de março de 2016 14:56
  • Experimente mais ou menos dessa forma:

    Select 
         A.FicTecProdCodEstr, 
         B.Prodnome,
         SUM(Ela.EstqLocArmazQtd) As SaldoMatPrim,
         A.ProdCodEstr, 
         C.ProdNome As Produto,
         null as QtdCaixa
      
    From -- ...
    
    Union 
    
    Select 
        null,
        null,
        null,
        null,
        null,
        SUM(Ela1.EstqLocArmazQtd/Pum.ProdUnidMedPeso) As QtdCaixa
    From -- ...

    Espero que ajude


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

    • Marcado como Resposta Marcos SJ segunda-feira, 14 de março de 2016 17:12
    segunda-feira, 14 de março de 2016 17:07
  • Bom dia,

    Experimente dessa forma:

    Select 
         A.FicTecProdCodEstr, 
         B.Prodnome,
         SUM(Ela.EstqLocArmazQtd) As SaldoMatPrim,
         A.ProdCodEstr, 
         C.ProdNome As Produto,
         (select SUM(Ela1.EstqLocArmazQtd / Pum.ProdUnidMedPeso) 
          from ESTQ_LOC_ARMAZ ELA1 With(Nolock), PROD_UNID_MED PUM  With(Nolock)
          where 
              ELA1.ProdCodEstr = A.ProdCodEstr and
              PUM.ProdCodEstr = B.ProdCodEstr) As QtdCaixa
      
    From Fic_Tec_Prod A with(nolock) 
    Inner join Produto B With(Nolock) ON B.ProdCodEstr = A.FicTecProdCodEstr
    Inner join produto C With(Nolock) ON C.ProdCodEstr = A.ProdCodEstr
    Inner Join ESTQ_LOC_ARMAZ ELA With(Nolock) ON ELA.ProdCodEstr = A.FicTecProdCodEstr
    
    Where 
        B.ProdCodEstr >= '13.04.0026'
        And  B.ProdCodEstr <= '13.04.0026'
        And  B.prodstat = 'Ativado'
        And (B.ProdDataValidFim is Null or B.ProdDataValidFim > getdate())
        And  C.prodstat = 'Ativado'
        And (A.fictecproddatafim Is null or a.fictecproddatafim > getdate())
        And  C.ProdDataValidFim Is null
    
    Group By
         A.FicTecProdCodEstr, 
         B.Prodnome,
         A.ProdCodEstr, 
         C.ProdNome

    Espero que ajude


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

    terça-feira, 15 de março de 2016 12:28

Todas as Respostas

  • Bom dia,

    Leandro, o tipo de dados de todas as colunas retornadas pelas 2 querys deve ser compatível.

    Acho que no seu caso você pode trocar o espaço em branco por null ou zero quando o tipo de dados é numérico, ou manter o espaço em branco e converter o valor numérico para Varchar.

    Espero que ajude


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

    • Sugerido como Resposta Antero Marques segunda-feira, 14 de março de 2016 15:10
    • Marcado como Resposta Marcos SJ segunda-feira, 14 de março de 2016 17:12
    segunda-feira, 14 de março de 2016 14:56
  • Boa tarde 

    Gapimex!

    Pode dar um exemplo pois mesmo colocando os campos como NULL apresenta a mensagem,

    Obrigado.

    segunda-feira, 14 de março de 2016 16:25
  • Experimente mais ou menos dessa forma:

    Select 
         A.FicTecProdCodEstr, 
         B.Prodnome,
         SUM(Ela.EstqLocArmazQtd) As SaldoMatPrim,
         A.ProdCodEstr, 
         C.ProdNome As Produto,
         null as QtdCaixa
      
    From -- ...
    
    Union 
    
    Select 
        null,
        null,
        null,
        null,
        null,
        SUM(Ela1.EstqLocArmazQtd/Pum.ProdUnidMedPeso) As QtdCaixa
    From -- ...

    Espero que ajude


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

    • Marcado como Resposta Marcos SJ segunda-feira, 14 de março de 2016 17:12
    segunda-feira, 14 de março de 2016 17:07
  • Olá Gapimex, 

    Desta forma traz o resultado sem erros porém em várias linhas, eu preciso que fique o resultado na mesma linha

    segunda-feira, 14 de março de 2016 17:40
  • Olá,

    Não sei se entendi corretamente, mas experimente dessa forma:

    Select 
        A1.FicTecProdCodEstr, 
        B1.Prodnome,
        SUM(Ela1.EstqLocArmazQtd) As SaldoMatPrim,
        A1.ProdCodEstr, 
        C1.ProdNome As Produto,
        SUM(Ela1.EstqLocArmazQtd/Pum.ProdUnidMedPeso) As QtdCaixa
    From 
    			   Fic_Tec_Prod A1 with(nolock) 
        Inner join Produto B1 With(Nolock) ON A1.FicTecProdCodEstr = B1.ProdCodEstr
        Inner join produto C1 With(Nolock) ON C1.ProdCodEstr = A1.ProdCodEstr
    	Inner Join ESTQ_LOC_ARMAZ ELA1 With(Nolock) ON ELA1.ProdCodEstr = A1.ProdCodEstr
        Inner Join PROD_UNID_MED PUM  With(Nolock) ON  PUM.ProdCodEstr = B1.ProdCodEstr
    	
    Where 
    
    		 B1.ProdCodEstr >= '13.04.0026'
        And  B1.ProdCodEstr <= '13.04.0026'
        And  B1.prodstat = 'Ativado'
        And (B1.ProdDataValidFim is Null or B1.ProdDataValidFim > getdate())
        And  C1.prodstat = 'Ativado'
        And (A1.fictecproddatafim Is null or a1.fictecproddatafim > getdate())
        And  C1.ProdDataValidFim Is null
    
    
    Group By
         A1.FicTecProdCodEstr, 
         B1.Prodnome,
         A1.ProdCodEstr, 
         C1.ProdNome 

    Espero que ajude


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

    segunda-feira, 14 de março de 2016 18:03
  • Desta forma traz o resultado porém o campo SaldoMatPrim é diferente da coluna QtdCaixa pois são produtos diferentes, desta forma traz o mesmo resultado, segue anexo.
    segunda-feira, 14 de março de 2016 18:58
  • Experimente fazer uns testes dessa forma:

    Select 
         A.FicTecProdCodEstr, 
         B.Prodnome,
         SUM(Ela.EstqLocArmazQtd) As SaldoMatPrim,
         A.ProdCodEstr, 
         C.ProdNome As Produto,
         (select SUM(Ela1.EstqLocArmazQtd / Pum.ProdUnidMedPeso) 
          from ESTQ_LOC_ARMAZ ELA1 With(Nolock) 
          where ELA1.ProdCodEstr = A.ProdCodEstr) As QtdCaixa
      
    From Fic_Tec_Prod A with(nolock) 
    Inner join Produto B With(Nolock) ON B.ProdCodEstr = A.FicTecProdCodEstr
    Inner join produto C With(Nolock) ON C.ProdCodEstr = A.ProdCodEstr
    Inner Join ESTQ_LOC_ARMAZ ELA With(Nolock) ON ELA.ProdCodEstr = A.FicTecProdCodEstr
    Inner Join PROD_UNID_MED PUM  With(Nolock) ON PUM.ProdCodEstr = B.ProdCodEstr
        
    	
    Where 
    
    		 B.ProdCodEstr >= '13.04.0026'
        And  B.ProdCodEstr <= '13.04.0026'
        And  B.prodstat = 'Ativado'
        And (B.ProdDataValidFim is Null or B.ProdDataValidFim > getdate())
        And  C.prodstat = 'Ativado'
        And (A.fictecproddatafim Is null or a.fictecproddatafim > getdate())
        And  C.ProdDataValidFim Is null
    
    
    Group By
         A.FicTecProdCodEstr, 
         B.Prodnome,
         A.ProdCodEstr, 
         C.ProdNome
    

    Espero que ajude


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

    segunda-feira, 14 de março de 2016 23:30
  • Bom dia,

    Está retornando a mensagem: Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression.

    terça-feira, 15 de março de 2016 11:48
  • Bom dia,

    Experimente dessa forma:

    Select 
         A.FicTecProdCodEstr, 
         B.Prodnome,
         SUM(Ela.EstqLocArmazQtd) As SaldoMatPrim,
         A.ProdCodEstr, 
         C.ProdNome As Produto,
         (select SUM(Ela1.EstqLocArmazQtd / Pum.ProdUnidMedPeso) 
          from ESTQ_LOC_ARMAZ ELA1 With(Nolock), PROD_UNID_MED PUM  With(Nolock)
          where 
              ELA1.ProdCodEstr = A.ProdCodEstr and
              PUM.ProdCodEstr = B.ProdCodEstr) As QtdCaixa
      
    From Fic_Tec_Prod A with(nolock) 
    Inner join Produto B With(Nolock) ON B.ProdCodEstr = A.FicTecProdCodEstr
    Inner join produto C With(Nolock) ON C.ProdCodEstr = A.ProdCodEstr
    Inner Join ESTQ_LOC_ARMAZ ELA With(Nolock) ON ELA.ProdCodEstr = A.FicTecProdCodEstr
    
    Where 
        B.ProdCodEstr >= '13.04.0026'
        And  B.ProdCodEstr <= '13.04.0026'
        And  B.prodstat = 'Ativado'
        And (B.ProdDataValidFim is Null or B.ProdDataValidFim > getdate())
        And  C.prodstat = 'Ativado'
        And (A.fictecproddatafim Is null or a.fictecproddatafim > getdate())
        And  C.ProdDataValidFim Is null
    
    Group By
         A.FicTecProdCodEstr, 
         B.Prodnome,
         A.ProdCodEstr, 
         C.ProdNome

    Espero que ajude


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

    terça-feira, 15 de março de 2016 12:28
  • Obrigado mais uma vez, desta forma ficou perfeito.

    abs

    terça-feira, 15 de março de 2016 12:45