Usuário com melhor resposta
Erro Select - "Subquery returned more than 1 value"

Pergunta
-
Bom dia,
Eu tenho o seguinte select:
Code SnippetSELECT 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_PRODUTOWHERE
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_DESCEste código esta funcionando perfeitamente, porém preciso adicionar mais duas coluna como demonstrado no código abaixo
Code SnippetSELECT 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_03FROM 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_PRODUTOWHERE
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_DESCQuando 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
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.
-
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_=' '
-