none
Erro com subquery RRS feed

  • Pergunta

  • Boa tarde...

    Preciso colocar uma subquery em uma select como uma columna mas não estou conseguindo me da o erro abaixo.

    A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.

    Segue Minha query

    SELECT DISTINCT
    CONCAT(RTRIM(QE6.QE6_PRODUT), ' - ', QE6.QE6_DESCPO)  AS PRODUTO,
    SB1.B1_X_ESPEC AS QUIMICO,
    QEK.QEK_CERQUA AS LAUDO,
    SC2.C2_XLOTEF  AS LTORIGINAL,
    SC2.C2_XNPAIS  AS ORIGEM,
    SC2.C2_XNOMFA  AS FABRICANTE,
    QER.QER_LOTE   AS LTINTERNO,
    SB1.B1_XDCB    AS DCB,
    SB1.B1_XDCI    AS DCI,
    SB1.B1_XCAS    AS CAS,
    CONVERT(VARCHAR(10), CAST(SC2.C2_XDTFAB AS DATE),103) AS FABRICACAO,
    CONVERT(VARCHAR(10), CAST(SC2.C2_XDTVALI AS DATE),103) AS VALIDADE,
    QE6.QE6_XMANUS AS MANUSEIO,
    QE6.QE6_XDERRA AS DERRAMAMENTO,
    QE6.QE6_XTRATA AS TRATAMENTO,
    QE1.QE1_DESCPO AS CARACTERISTICAS,
    QE8.QE8_TEXTO  AS ESPECIFICACAO,
    (SELECT QEQ_MEDICA FROM QEQ020 INNER JOIN QER020 WITH(NOLOCK) ON QEQ_CODMED = QER_CHAVE WHERE QER_LOTE = 'PS-010327/F02') AS RESULTADO,
    QE8.QE8_METODO AS METODO
    FROM QER020 AS QER
    INNER JOIN QE8020 AS QE8 WITH(NOLOCK) ON QE8.QE8_PRODUT = QER.QER_PRODUT
    INNER JOIN QE1010 AS QE1 WITH(NOLOCK) ON QE1.QE1_ENSAIO = QE8.QE8_ENSAIO
    INNER JOIN QEK020 AS QEK WITH(NOLOCK) ON QEK.QEK_LOTE = QER.QER_LOTE
    INNER JOIN QE6020 AS QE6 WITH(NOLOCK) ON QE6.QE6_PRODUT = QER.QER_PRODUT
    INNER JOIN SC2020 AS SC2 WITH(NOLOCK) ON SC2.C2_NUM = QEK.QEK_XORDEM
    INNER JOIN SB1020 AS SB1 WITH(NOLOCK) ON SB1.B1_COD = QER.QER_PRODUT
    WHERE QER.QER_LOTE = 'PS-010327/F02'
    ORDER BY QE1.QE1_DESCPO

    desde já agradeço


    JUNIOR GUERREIRO T.I


    sexta-feira, 8 de junho de 2018 20:34

Respostas

  • Olá Junior.

    Sua subquery:

    (SELECT QEQ_MEDICA FROM QEQ020 INNER JOIN QER020 WITH(NOLOCK) ON QEQ_CODMED = QER_CHAVE WHERE QER_LOTE = 'PS-010327/F02') 

    está retornando mais de uma linha.

    A coluna QEQ_MEDICA deveria retorna um apenas um valor.

    EX: QEQ_MEDICA  -se estivéssemos trabalhando com números o resultado deveria ser : 1  mas está retornando 1, 2 ,3 ....

    EX: QEQ_MEDICA  -se estivéssemos trabalhando com letras o resultado deveria ser : 'A'  mas está retornando 'A','B','C'...

    Você deve filtrar melhor a sua subquery fazendo com que ela traga apenas um resultado.

    sexta-feira, 8 de junho de 2018 21:36
  • Olá, Junior!

       Se a relação entre estas tabelas é 1-n, e a coluna QEQ_MEDICA corresponde a um valor numérico, você deve aplicar a função SUM. Mas se não deveria retornar mais de um registro, você terá de verificar se está faltando incluir mais algum filtro nesta subquery.

    Bom trabalho!

    sexta-feira, 8 de junho de 2018 20:55

Todas as Respostas

  • Olá, Junior!

       Se a relação entre estas tabelas é 1-n, e a coluna QEQ_MEDICA corresponde a um valor numérico, você deve aplicar a função SUM. Mas se não deveria retornar mais de um registro, você terá de verificar se está faltando incluir mais algum filtro nesta subquery.

    Bom trabalho!

    sexta-feira, 8 de junho de 2018 20:55
  • Olá Junior.

    Sua subquery:

    (SELECT QEQ_MEDICA FROM QEQ020 INNER JOIN QER020 WITH(NOLOCK) ON QEQ_CODMED = QER_CHAVE WHERE QER_LOTE = 'PS-010327/F02') 

    está retornando mais de uma linha.

    A coluna QEQ_MEDICA deveria retorna um apenas um valor.

    EX: QEQ_MEDICA  -se estivéssemos trabalhando com números o resultado deveria ser : 1  mas está retornando 1, 2 ,3 ....

    EX: QEQ_MEDICA  -se estivéssemos trabalhando com letras o resultado deveria ser : 'A'  mas está retornando 'A','B','C'...

    Você deve filtrar melhor a sua subquery fazendo com que ela traga apenas um resultado.

    sexta-feira, 8 de junho de 2018 21:36