Formando uma grid com das tabelas

Tenho uma grid formada por uma tabela de oportunidade, porem em uma outra tabela tenho as informações de pagamento, queria puxar para a grid a informação de quantas vezes o produto foi parcelado, o que consegui foi puxar a parcela porem não consegui puxar a parcela referente a oportunidade ela pega a primeira da tabela de pagamento e mostra para todas as oportunidade a mesma parcela a baixo segue as duas tabelas que tenho no banco. o projeto e as tabelas do banco não fui e quem desenvolveu apenas peguei para fazer manutenção a pessoa que desenvolveu ele não trabalha mais na empresa, se alguém puder e ajudar fico grato.

CREATE TABLE public.oportunidade
(
id integer NOT NULL DEFAULT nextval(‘oportunidade_id_seq’::regclass),
responsavel integer NOT NULL,
tipooportunidade integer NOT NULL,
etapaoportunidade integer NOT NULL,
estado character varying(2) COLLATE pg_catalog.“default” NOT NULL,
cidade character varying(100) COLLATE pg_catalog.“default” NOT NULL,
cliente integer,
clientenome character varying(100) COLLATE pg_catalog.“default”,
clienteemail character varying(100) COLLATE pg_catalog.“default”,
clientetelefone character varying(11) COLLATE pg_catalog.“default” NOT NULL,
observacao text COLLATE pg_catalog.“default”,
valorprevisto numeric(10,3),
valorfechado numeric(10,3),
pessoavinculo integer,
origemo integer,
suborigemo integer,
contatoorigem integer,
datacriacao timestamp without time zone DEFAULT now(),
dataprevisaoinicial timestamp without time zone,
datafechamento timestamp without time zone,
pessoacontasaldo numeric(10,3),
valorcontausar numeric(10,3),
revisao integer,
pessoaorigem character varying(100) COLLATE pg_catalog.“default”,
observacaointerna text COLLATE pg_catalog.“default”,
dataprevisaoentrega date,
dataefetivaentrega date,
datavalidade date,
tipofrete character(3) COLLATE pg_catalog.“default”,
codigopedidoerp character varying(10) COLLATE pg_catalog.“default”,
numeronotaerp character varying(10) COLLATE pg_catalog.“default”,
categoriapessoatabelapreco integer,
dataemissaonota date,
codigopedidosererp character varying(10) COLLATE pg_catalog.“default”,
numeronotasererp character varying(10) COLLATE pg_catalog.“default”,
numeropedidosererp character varying(10) COLLATE pg_catalog.“default”,
financiamento character(1) COLLATE pg_catalog.“default”,
financiamentocodigocontrato character varying(30) COLLATE pg_catalog.“default”,
financiamentoarquivo bytea,
financiamentonome character varying(30) COLLATE pg_catalog.“default”,
financiamentotamanho character varying(30) COLLATE pg_catalog.“default”,
ordermcompracliente character varying(20) COLLATE pg_catalog.“default”,
valorfrete numeric(10,0),
transportadora integer,
codigopedidoerp2 character varying(10) COLLATE pg_catalog.“default”,
numeronotaerp2 character varying(10) COLLATE pg_catalog.“default”,
dataemissaonota2 date,
codigopedidosererp2 character varying(10) COLLATE pg_catalog.“default”,
numeronotasererp2 character varying(10) COLLATE pg_catalog.“default”,
dataemissaosernota2 timestamp without time zone,
dataemissaosernota date,
contrato bytea,
contratonome character varying(100) COLLATE pg_catalog.“default”,
contratotamanho character varying(30) COLLATE pg_catalog.“default”,
uuidoportunidade text COLLATE pg_catalog.“default”,
uuid text COLLATE pg_catalog.“default”,
dataprevisaoentregaalteracao date,
motivoalteracaoentrega integer,
linhainteresse character varying(100) COLLATE pg_catalog.“default”,
CONSTRAINT pk_oportunidade PRIMARY KEY (id),
CONSTRAINT fk_oportunidade_cliente FOREIGN KEY (cliente)
REFERENCES public.pessoa (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT fk_oportunidade_etapaoportunidade FOREIGN KEY (etapaoportunidade)
REFERENCES public.etapaoportunidade (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT fk_oportunidade_responsavel FOREIGN KEY (responsavel)
REFERENCES public.pessoa (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT fk_oportunidade_tipooportunidade FOREIGN KEY (tipooportunidade)
REFERENCES public.tipooportunidade (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT fk_oportunidade_transportadora FOREIGN KEY (transportadora)
REFERENCES public.pessoa (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)

CREATE TABLE public.oportunidadepagamento
(
id integer NOT NULL DEFAULT nextval(‘oportunidadepagamento_id_seq’::regclass),
oportunidade integer NOT NULL,{pega o id da oportunidade para vincular o pagamento com a oportunidade}
formapagamento integer NOT NULL,
valoroportunidade numeric(10,3),
valorentrada numeric(10,3),
parcelas integer,
primeirovencimento date,
diasentrevencimento integer,
valorparcelado numeric(10,3),
formapagamentoentrada integer,
vencimentoentrada date,
diasaposentrega integer,
auxilioparcela1 integer,
auxilioparcela2 integer,
produtoservico character(1) COLLATE pg_catalog.“default”,
CONSTRAINT pk_oportunidadepagamento PRIMARY KEY (id),
CONSTRAINT fk_oportunidadepagamento_formapagamento FOREIGN KEY (formapagamento)
REFERENCES public.formapagamento (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT fk_oportunidadepagamento_oportunidade FOREIGN KEY (oportunidade)
REFERENCES public.oportunidade (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)

A pergunta está confusa.

Apresente um modelo exemplo como deseja o resultado explicando o que são cada valor no modelo e de onde vem a informação (tabela).

Apresentar os extensos creates das tabelas, Não ajuda muito.

Quantidade de produtos? Produtos é Oportidades? Exponha baseado no nome das tabelas, para que não tenhamos que adivinhar.

Select o.campo1, o.campo2,…,o.campoN, (select count(*) from parcelas p where o.oportunidade = o.id) as número_parcelas from oportunidade o

SELECT p.auxilioparcela1
FROM oportunidade AS o
INNER JOIN oportunidadepagamento AS p ON p.oportunidade = o.id

utilizei esta estrutura para me mostrar a quantidade de parcelas, porem ele não me traz a informação apenas referente a minha oportunidade mas sim de todas as parcelas de todas as oportunidades que tenho, a baixo segue link com imagem de como esta aparecendo aparecem as informações que já estou filtrando da tabela de oportunidade e a ultima coluna esta buscando da tabela oportunidade pageant porem não consigo pega a quantidade de parcelas apenas de cada oportunidade individual e mostrar ela com sua quantidade de parcelas.

https://prnt.sc/1qdadqy

Vou deixar para os universitários

Realmente não estou conseguindo entender.