none
Erro Select - "Subquery returned more than 1 value" RRS feed

  • Pergunta

  •  

    Bom dia,

     

    Eu tenho o seguinte select:

     

    Code Snippet

    SELECT SB1.B1_COD, SB1.B1_PROC, SB1.B1_DESC, SB2.B2_QATU,
    (SELECT SUM(Z4_SEMAN42+Z4_SEMAN43+Z4_SEMAN44) AS QTDE FROM SZ4010 WHERE Z4_ANO ='2008' AND Z4_PRODUTO=B1_COD AND D_E_L_E_T_=' ' ) AS QTDE_2008,
    (SELECT SUM(Z4_SEMAN01+Z4_SEMAN02+Z4_SEMAN03) AS QTDE02 FROM SZ4010 WHERE Z4_ANO ='2009' AND Z4_PRODUTO=B1_COD AND D_E_L_E_T_=' ' ) AS QTDE_2009,
    (SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='B12-08' AND C7_PRODUTO = B1_COD) AS QTDE_01,

    FROM SB1010 SB1

    FULL JOIN SB2010 SB2 ON SB1.B1_COD=SB2.B2_COD
    LEFT JOIN SZ4010 SZ4 ON SB1.B1_COD=SZ4.Z4_PRODUTO
    LEFT JOIN SC7010 SC7 ON SB1.B1_COD=SC7.C7_PRODUTO

    WHERE
    SB1.B1_FILIAL ='' AND
    SB2.B2_FILIAL = '01' AND
    SB1.B1_TIPO = 'SE' AND
    SB2.B2_LOCAL ='01' AND
    SB1.B1_MSBLQL = '2' AND
    SB1.D_E_L_E_T_=' ' AND
    SB2.D_E_L_E_T_=' '

    GROUP BY SB1.B1_COD, SB1.B1_PROC, SB1.B1_DESC, SB2.B2_QATU

    HAVING
    (SELECT SUM(Z4_SEMAN42+Z4_SEMAN43+Z4_SEMAN44) AS QTDE_SZ4 FROM SZ4010 WHERE Z4_ANO='2008' AND Z4_PRODUTO=B1_COD ) > 0
    OR SB2.B2_QATU>0
    OR (SELECT SUM(Z4_SEMAN01+Z4_SEMAN02+Z4_SEMAN03) AS QTDE_SZ4 FROM SZ4010 WHERE Z4_ANO='2009' AND Z4_PRODUTO=B1_COD)>0 
    OR (SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='B12-08' AND C7_PRODUTO = B1_COD) <> 0
    ORDER BY SB1.B1_DESC

     

     

    Este código esta funcionando perfeitamente, porém preciso adicionar mais duas coluna como demonstrado no código abaixo

     

    Code Snippet

    SELECT SB1.B1_COD, SB1.B1_PROC, SB1.B1_DESC, SB2.B2_QATU,
    (SELECT SUM(Z4_SEMAN42+Z4_SEMAN43+Z4_SEMAN44) AS QTDE FROM SZ4010 WHERE Z4_ANO ='2008' AND Z4_PRODUTO=B1_COD AND D_E_L_E_T_=' ' ) AS QTDE_2008,
    (SELECT SUM(Z4_SEMAN01+Z4_SEMAN02+Z4_SEMAN03) AS QTDE02 FROM SZ4010 WHERE Z4_ANO ='2009' AND Z4_PRODUTO=B1_COD AND D_E_L_E_T_=' ' ) AS QTDE_2009,
    (SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='B12-08' AND C7_PRODUTO = B1_COD) AS QTDE_01,
    (SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='BV1307' AND C7_PRODUTO = B1_COD) AS QTDE_SC7,
    (SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='FR03-8' AND C7_PRODUTO = B1_COD) AS QTDE_03

    FROM SB1010 SB1

    FULL JOIN SB2010 SB2 ON SB1.B1_COD=SB2.B2_COD
    LEFT JOIN SZ4010 SZ4 ON SB1.B1_COD=SZ4.Z4_PRODUTO
    LEFT JOIN SC7010 SC7 ON SB1.B1_COD=SC7.C7_PRODUTO

    WHERE
    SB1.B1_FILIAL ='' AND
    SB2.B2_FILIAL = '01' AND
    SB1.B1_TIPO = 'SE' AND
    SB2.B2_LOCAL ='01' AND
    SB1.B1_MSBLQL = '2' AND
    SB1.D_E_L_E_T_=' ' AND
    SB2.D_E_L_E_T_=' '

    GROUP BY SB1.B1_COD, SB1.B1_PROC, SB1.B1_DESC, SB2.B2_QATU

    HAVING
    (SELECT SUM(Z4_SEMAN42+Z4_SEMAN43+Z4_SEMAN44) AS QTDE_SZ4 FROM SZ4010 WHERE Z4_ANO='2008' AND Z4_PRODUTO=B1_COD ) > 0
    OR SB2.B2_QATU>0
    OR (SELECT SUM(Z4_SEMAN01+Z4_SEMAN02+Z4_SEMAN03) AS QTDE_SZ4 FROM SZ4010 WHERE Z4_ANO='2009' AND Z4_PRODUTO=B1_COD)>0 
    OR (SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='B12-08' AND C7_PRODUTO = B1_COD) <> 0
    OR (SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='BV1307' AND C7_PRODUTO = B1_COD) <> 0
    OR (SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='FR03-8' AND C7_PRODUTO = B1_COD) <> 0

    ORDER BY SB1.B1_DESC

     

     

    Quando adiciono esta linhas o Quey Analyzer retornar o seguinte erro:

    Server: Msg 512, Level 16, State 1, Line 1
    Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

    Alguém poderia definir do que se trata esse erro uma vez que quero criar mais duas colunas de acordo com a 1 criada? A Modificação ocorre apenas no C7_NUM que busca outro grupo de registros.

     

    Desde de ja agradeço

     

    Wagner Marrane

    IT - Ball

    quarta-feira, 29 de outubro de 2008 12:11

Respostas

Todas as Respostas

  • Marrane,


    Certifique-se de que uma das queries abaixo não está retornando mais de um valor como resultado.

     

    SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='FR03-8' AND C7_PRODUTO = B1_COD

     

    SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='FR03-8' AND C7_PRODUTO = B1_COD

     

    De acordo com a mensagem recebida, o erro seria este.

    Rode as queries separadamente para fazer esse teste.

     

    [ ]s.

     

     

    quarta-feira, 29 de outubro de 2008 12:50
  • Mas quando eu aplico a query:

     

    SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='BV1307' AND C7_PRODUTO = B1_COD AND D_E_L_E_T_=' '

     

    eu troco o valor de pesquisa C7_NUM

     

    SELECT C7_QUANT FROM SC7010 WHERE C7_NUM='FR03-8' AND C7_PRODUTO = B1_COD AND D_E_L_E_T_=' '

     

    Mesmo com esta troca caso ocorra valor identicos eu teria problema?
    quarta-feira, 29 de outubro de 2008 12:55
  • Encontrei o problema, existe dois registro então fui obrigado a aplicar um SUM no C7_QUANT

    quarta-feira, 29 de outubro de 2008 13:20