Fórum erro multiple rows in singleton select ao fazer subselect #555801
07/06/2016
0
CREATE TABLE PESSOA (ID INTEGER NOT NULL, NOME VARCHAR(50)); CREATE TABLE FERIAS (ID INTEGER NOT NULL, ID_PESSOA INTEGER, ANO VARCHAR(20)); INSERT INTO PESSOA (ID, NOME) VALUES (1, 'João'); INSERT INTO PESSOA (ID, NOME) VALUES (2, 'Maria'); INSERT INTO PESSOA (ID, NOME) VALUES (3, 'José'); INSERT INTO FERIAS (ID, ID_PESSOA, ANO) VALUES (1, 1, '2016'); INSERT INTO FERIAS (ID, ID_PESSOA, ANO) VALUES (2, 1, '2015'); INSERT INTO FERIAS (ID, ID_PESSOA, ANO) VALUES (3, 1, '2014'); INSERT INTO FERIAS (ID, ID_PESSOA, ANO) VALUES (4, 2, '2016'); INSERT INTO FERIAS (ID, ID_PESSOA, ANO) VALUES (5, 2, '2015'); INSERT INTO FERIAS (ID, ID_PESSOA, ANO) VALUES (6, 3, '2015'); COMMIT WORK;
Gostaria que saísse assim:
ID NOME ANO
1 João 2016, 2015, 2014
2 Maria 2016, 2015
3 José 2015
SELECT DISTINCT p.id, p.nome, (select z.ano from ferias z where z.id_pessoa = p.id) as ferias_tiradas from pessoa p left outer join ferias f on p.id = f.id_pessoa
e aparece a seguinte mensagem: "multiple rows in singleton select", o que fazer no subselect? obrigado!
Guilherme Godoy
Curtir tópico
+ 0Post mais votado
07/06/2016
Te aconselho a fazer uma stored procedure para tua necessidade . Dê uma olhada neste exemplo abaixo :
create procedure getAno(id_pessoa int)
returns anosFerias varchar(50)
as
declare variable ano varchar(50)
begin
anosFerias = '';
for select F.ano
from Ferias f
where F.id_pessoa = :id_pessoa
into :ano
do
begin
if (anosFerias = '') then
begin
anosFerias = ano;
end
else
begin
anosFerias = anosFerias || ',' || ano;
end
end
suspend;
end
Implemente esta rotina na tua consulta sendo uma subselect.
Miguel Junior
Gostei + 1
Mais Posts
07/06/2016
Rafael Bosco
'SELECT DISTINCT P.ID, P.NOME, F.ANO FROM PESSOA P INNER JOIN FERIAS F ON P.ID = F.IDPESSOA';
Gostei + 0
08/06/2016
Guilherme Godoy
create procedure getAno(id_pessoa int)
returns (anosFerias varchar(50),
ano varchar(50) )
as
begin
anosFerias = '';
for select F.ano
from Ferias f
where F.id_pessoa = :id_pessoa
into :ano
do
begin
if (anosFerias = '') then
begin
anosFerias = ano;
end
else
begin
anosFerias = anosFerias || ',' || ano;
end
end
suspend;
endGostei + 0
Clique aqui para fazer login e interagir na Comunidade :)