Jump to content

Archived

This topic is now archived and is closed to further replies.

Henrique Caldeira

Erro estranho: Subquery returned more than 1 value.

Recommended Posts

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

Share this post


Link to post
Share on other sites

Falai Henrique beleza,

 

entaum esse erro ae significa que uma sub-query retornou mais de um valor e isto não é permitido no local onde esta sub-query esta sendo utilizada

 

exemplo, coloquei uma sub-query(subselect) para listar a coluna productID da tabela Order Details, só que sta tabela é N-1 para a tabela Orders, desta forma vai retornar mais que um valor no sub-select, entaum vai ocorrer o erro 512

use northwind;
select top 10 CustomerID, (select ProductID from [order details] where OrderID = O.OrderID) as subquery from [orders] O

 

o mesmo exemplo, só que desta vez coloquei o top 1 só pra trazer o 1° registro que encontrar, desta forma naum vai dar erro, pois sempre o sub-select vai trazer 1 registro, se essas duas tabelas fossem 1-1 naum teria necessidade o top 1, ou então se tivessemos feito um sub-select que retornasse no máximo uma linha para cada consulta, por exemplo um select de contagem (COUNT) ou somatória (SUM)

use northwind;
select top 10 CustomerID, (select top 1 ProductID from [order details] where OrderID = O.OrderID) as subquery from [orders] O

 

caso tiver mais dúvidas posta ae o comando que tu ta utilizando.

 

t+

Share this post


Link to post
Share on other sites

select TPRD.NOMEFANTASIA from tprd inner join titmmov on TPRD.CODCOLIGADA = TITMMOV.CODCOLIGADA and TPRD.IDPRD = TITMMOV.IDPRD where titmmov.idmov = (select tmov.idmov from titmmov inner join tmov on TITMMOV.CODCOLIGADA = TMOV.CODCOLIGADA and TITMMOV.IDMOV = TMOV.IDMOV where tmov.numeromov = (select substring(flan.numerodocumento,1,6) from flan where numerodocumento = '04105301'))dessa forma ele retorna o valor desejado...mais eu preciso de por as restrições tipocodfilial = 1 and(datavencimento >= :dataini and datavencimento >= :datafim)dai da esse erro

Share this post


Link to post
Share on other sites

neste dois trechos podem ocorrer o erro 512:

- where titmmov.idmov = (select tmov.idmov

- where tmov.numeromov = (select substring(flan.numerodocumento,1,6)

isto pq. no caso o operador = vai esperar receber uma linha e nestes selects podem ocorrer mais de uma linha

 

duas formas de resolver isto:

1 - colocar um top 1 no sub-select

- where titmmov.idmov = (select top 1 tmov.idmov

- where tmov.numeromov = (select top 1 substring(flan.numerodocumento,1,6)

OBS.: com isso só vai pesquisar no primeiro registro encontrado

 

2 - trocar o operador = pelo operador in

- where titmmov.idmov in (select tmov.idmov

- where tmov.numeromov in (select substring(flan.numerodocumento,1,6)

OBS.: com isso vai pesquisar em todos os registros encontrados

 

 

t++

Share this post


Link to post
Share on other sites

putiz cara usei o in e deu certinho como eu queria...agora queria usar a estriçãoand datavencimento >= :dataini and datavencimento <= :datafimServer: Msg 170, Level 15, State 1, Line 12Line 12: Incorrect syntax near ':'.

Share this post


Link to post
Share on other sites

mais o que são estes dois pontos ( : ) ae, acho q é só tirar eles dai, ou tem algo pra você ter colocado eles, é q nunca vi esses : ae, se for parametros naum seria o arroba ( @ ), ex. @dataini

 

outra forma de consultar entre valores é com o between

and datavencimento between @dataini and @datafim

 

t+

Share this post


Link to post
Share on other sites

Galera sou novo aqui!!!!

Já vou direto ao assunto, queria saber se tem como eu trazer dois registros em uma SubSelect????

No caso a SubSelect vira um campo quando eu renomeio.

Eu so queria saber se tem como Retornar dois valores na mesma SubSelect.

agradeço desde já.

Estou no aguardo....... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Share this post


Link to post
Share on other sites

Galera sou novo aqui!!!!Já vou direto ao assunto, queria saber se tem como eu trazer dois registros em uma SubSelect????No caso a SubSelect vira um campo quando eu renomeio.Eu so queria saber se tem como Retornar dois valores na mesma SubSelect.agradeço desde já.Estou no aguardo....... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

o sub-select só pode ter um registro para cada linha do select

Share this post


Link to post
Share on other sites

nossa.. alguem pode me dar uma luz.. estou com esse mesmo problema...

 

Select

e.codigo, e.valor, nf.valor,

(Select SUM(nf.valor) From NotaFiscal

where nf.mes <= nf.mes and nf.empenho_codigo = e.codigo) AS Acumulado,

e.valor - ISNULL(

(Select SUM (nf.valor) from NotaFiscal

where nf.mes <= nf.mes and nf.empenho_codigo = e.codigo),0) as Saldo

From Empenho E, NotaFiscal nf

where e.codigo = nf.empenho_codigo

GROUP BY e.codigo, e.valor, nf.valor, nf.mes, nf.empenho_codigo

 

CREATE TABLE Empenho(Codigo Int, Contrato_Codigo int, Modalidade_Codigo int , Numero varchar(20), Valor money, Data Datetime)

CREATE TABLE NotaFiscal(Codigo int, Empenho_Codigo int (FK), Numero varchar(20), Mes int, Data datetime)

 

Como que faço para aparecer mais registros entao, se a subconsulta so retorna um? essa minha consulta so funciona se houver apenas um registro, qual a forma de fazer com quem apareçam todos?

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.