none
Problema com union all RRS feed

  • Pergunta

  • Oi, pessoal estou com problema de union all entre select. ate um pouco estranho de Error converting data type varchar to numeric na linha 1 do primeiro select. sendo se eu executar eles separado nao da esse erro. o select e esse:

    SELECT MTAREFA.CODTRF AS CODIGO,
    MCMP.CODCMP AS COMPOSICAO,
    MCMP.CODUND AS UNIDADE,
    MCMP.PRODUCAOPORHORA AS PRODUCAO_EQUIPE,
    MTAREFA.NOME AS SERVICO,
    MISM.DESCISM AS INSUMO,
    MISM.CODUND AS UNIDADE_INSUMO,
    MCMP.EQUIPAMENTO AS CUSTO_HORARIO_DA_EQUIPE_MECANICA,
    MCMP.MAOOBRA AS CUSTO_HORARIO_DA_MAO_DE_OBRA_SUPLEMENTAR,
    MCMP.MATERIAL AS CUSTO_UNITARIO_DA_UTILIZACAO_DE_MARTERIAS,
    MCMP.TRANSPORTE AS CUSTO_UNITARIO_DE_TRANSPORTE_DE_MATERIAS,
    MCMP.VALORCOMLEI AS CUSTO_UNITARIO_DO_SERVICO,
    MCMP.VALORBDI AS BDI,
    MCMP.VALORTOTAL AS PRECO_UNITARIO_DO_SERVICO,

    CASE WHEN MRECCMP.GRUPODNER = 'B' THEN CONVERT(NVARCHAR, MISM.FATORK)
    ELSE ''
    END AS FATORK,
    MISM.GRUPODNER AS GRUPODNIT,
    MRECCMP.DMT/10000 AS DMT,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.QUANTIDADE/10000,4)) AS QTDE,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.VALORUNIT,4)) AS PRECO_PRODUTIVO,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.PRECOIMPRODUTI vou,4)) AS PRECO_IMPRODUTIVO,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.VALORTOTAL,4)) AS VALOR_TOTAL,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.COEFICIENTEPRO DUTIVO/10000,4)) AS COEFICIENTEPRODUTIVO,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.COEFICIENTEIMP RODUTIVO/10000,4)) COEFICIENTEIMPRODUTIVO,
    'COMPOSIÇAO' AS TABELA

    FROM MTAREFA
    INNER JOIN MCMP
    INNER JOIN MRECCMP
    INNER JOIN MISM
    ON MISM.CODCOLIGADA = MRECCMP.CODCOLIGADA
    AND MISM.IDPRJ = MRECCMP.IDPRJ
    AND MISM.IDISM = MRECCMP.IDISM
    ON MRECCMP.CODCOLIGADA = MCMP.CODCOLIGADA
    AND MRECCMP.IDPRJ = MCMP.IDPRJ
    AND MRECCMP.IDCMP = MCMP.IDCMP
    ON MCMP.CODCOLIGADA = MTAREFA.CODCOLIGADA
    AND MCMP.IDPRJ = MTAREFA.IDPRJ
    AND MCMP.IDCMP = MTAREFA.IDCMP

    WHERE MTAREFA.CODCOLIGADA = 1
    AND MTAREFA.IDPRJ = 21


    UNION ALL

    SELECT MTAREFA.CODTRF AS CODIGO,
    (SELECT CMP.CODCMP
    FROM MCMP CMP
    WHERE CMP.CODCOLIGADA = MCMP.CODCOLIGADA
    AND CMP.IDPRJ = MCMP.IDPRJ
    AND CMP.IDCMP = MRECCMP.IDCMP) AS COMPOSICAO,


    (SELECT CMP.CODUND
    FROM MCMP CMP
    WHERE CMP.CODCOLIGADA = MCMP.CODCOLIGADA
    AND CMP.IDPRJ = MCMP.IDPRJ
    AND CMP.IDCMP = MRECCMP.IDCMP) AS UNIDADE,
    MCMP.PRODUCAOPORHORA AS PRODUCAO_EQUIPE,
    '-' AS SERVICO,
    MCMP.CODCMP + ' - ' + MCMP.DESCCMP AS INSUMO,
    MCMP.CODUND AS UNIDADE_INSUMO,
    CASE WHEN MRECCMP.GRUPODNER = 'B' THEN CONVERT(NVARCHAR, MISM.FATORK)
    ELSE ''
    END AS FATORK,
    MRECCMP.GRUPODNER AS GRUPODNIT,
    MRECCMP.DMT/10000 AS DMT,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.QUANTIDADE/10000,4)) AS QTDE,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.VALORUNIT,4)) AS PRECO_PRODUTIVO,
    ISNULL(CONVERT(NUMERIC(15,4),ROUND(MRECCMP.PRECOIM PRODUTIVO,4)),0) AS PRECO_IMPRODUTIVO,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.VALORTOTAL,4)) AS VALOR_TOTAL,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.COEFICIENTEPRO DUTIVO/10000,4)) AS COEFICIENTEPRODUTIVO,
    CONVERT(NUMERIC(15,4),ROUND(MRECCMP.COEFICIENTEIMP RODUTIVO/10000,4)) COEFICIENTEIMPRODUTIVO,
    'SUBCOMPOSIÇAO' AS TABELA,
    MCMP.EQUIPAMENTO AS CUSTO_HORARIO_DA_EQUIPE_MECANICA,
    MCMP.MAOOBRA AS CUSTO_HORARIO_DA_MAO_DE_OBRA_SUPLEMENTAR,
    MCMP.MATERIAL AS CUSTO_UNITARIO_DA_UTILIZACAO_DE_MARTERIAS,
    MCMP.TRANSPORTE AS CUSTO_UNITARIO_DE_TRANSPORTE_DE_MATERIAS,
    MCMP.VALORCOMLEI AS CUSTO_UNITARIO_DO_SERVICO,
    MCMP.VALORBDI AS BDI,
    MCMP.VALORTOTAL AS PRECO_UNITARIO_DO_SERVICO

    FROM MCMP
    INNER JOIN MRECCMP
    LEFT JOIN MISM
    ON MISM.CODCOLIGADA = MRECCMP.CODCOLIGADA
    AND MISM.IDPRJ = MRECCMP.IDPRJ
    AND MISM.IDISM = MRECCMP.IDISM
    ON MRECCMP.CODCOLIGADA = MCMP.CODCOLIGADA
    AND MRECCMP.IDPRJ = MCMP.IDPRJ
    AND MRECCMP.IDCMPFILHA = MCMP.IDCMP
    INNER JOIN MTAREFA
    ON MTAREFA.CODCOLIGADA = MCMP.CODCOLIGADA
    AND MTAREFA.IDPRJ = MCMP.IDPRJ
    AND MTAREFA.IDCMP = MRECCMP.IDCMP
    WHERE MCMP.CODCOLIGADA = 1
    AND MCMP.IDPRJ = 21
    ORDER BY CODIGO,
    GRUPODNIT,
    MISM.DESCISM

    Sera que alguem pode me ajudar?
    sexta-feira, 12 de agosto de 2011 13:12

Respostas

  • Oi Jason,

    Olhando melhor o SELECT, temos vários pontos de investigação.

    - Pode haver uma coluna numérica em um SELECT e outra textual no outro SELECT
    - As colunas que estão sendo convertidas para Numeric podem ter valores inválidos
    - Algumas das colunas dos JOINs pode ser inteira e a outra textual

    Não é possível ajudá-lo sem ter os dados. É preciso investigar cada um dos casos e achar o dado que está fazendo a consulta dar o erro. O ISNUMERIC poderá ajudá-lo

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Eder Costa terça-feira, 23 de agosto de 2011 14:57
    • Marcado como Resposta Heloisa Pires quinta-feira, 5 de abril de 2012 18:19
    sexta-feira, 12 de agosto de 2011 14:34

Todas as Respostas

  • Bom Dia,

    Esse erro ocorre porque a coluna (em dos SELECTs) é textual e no outro é inteiro. Como o inteiro tem precedência, o otimizador tentará converter todos os textos em inteiro para fazer a junção e deve haver um texto que não pode ser convertido. Há duas soluções possíveis:

    - Converte um dos campos para VARCHAR
    - Examine qual dos SELECT retorna um texto que não pode ser convertido (use a função ISNUMERIC para descobrir)

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 12 de agosto de 2011 13:31
  • Opa, Gustavo quando execulto o select sem essa informações

     

    MCMP.EQUIPAMENTO AS CUSTO_HORARIO_DA_EQUIPE_MECANICA,
    MCMP.MAOOBRA AS CUSTO_HORARIO_DA_MAO_DE_OBRA_SUPLEMENTAR,
    MCMP.MATERIAL AS CUSTO_UNITARIO_DA_UTILIZACAO_DE_MARTERIAS,
    MCMP.TRANSPORTE AS CUSTO_UNITARIO_DE_TRANSPORTE_DE_MATERIAS,
    MCMP.VALORCOMLEI AS CUSTO_UNITARIO_DO_SERVICO,
    MCMP.VALORBDI AS BDI,
    MCMP.VALORTOTAL AS PRECO_UNITARIO_DO_SERVICO,

     

    ele executa normal. e esses campos sao todos numericos numericos

    sexta-feira, 12 de agosto de 2011 14:19
  • Oi Jason,

    Olhando melhor o SELECT, temos vários pontos de investigação.

    - Pode haver uma coluna numérica em um SELECT e outra textual no outro SELECT
    - As colunas que estão sendo convertidas para Numeric podem ter valores inválidos
    - Algumas das colunas dos JOINs pode ser inteira e a outra textual

    Não é possível ajudá-lo sem ter os dados. É preciso investigar cada um dos casos e achar o dado que está fazendo a consulta dar o erro. O ISNUMERIC poderá ajudá-lo

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Eder Costa terça-feira, 23 de agosto de 2011 14:57
    • Marcado como Resposta Heloisa Pires quinta-feira, 5 de abril de 2012 18:19
    sexta-feira, 12 de agosto de 2011 14:34
  • Como poderia utilizar entao o isnumeric...
    terça-feira, 16 de agosto de 2011 13:23