>>Veja se isso te resolve
>>select cod_associado, seq_fam, nome, 1 as tipo from associados where
>>seq_fam = 0 UNION ALL select cod_associado, seq_fam, nome, 2 as tipo
>>from associados where seq_fam <> 0 order by cod_associado, tipo, nome;
>>Perlo menos no meu teste aqui deu certo.
Boa tarde, Flavio.
Não resolveu porque primeiro vem a ordenação pelo nome do titular e os
dependentes abaixo.
Com a ajuda do Rafael Fialho eu consegui chegar nesta view:
CREATE OR REPLACE VIEW view_associado_smc AS
WITH associado (ordem, cod_associado, seq_fam, nome, num_convenio,
cod_proposta, cod_status, dt_nasc, idade) AS
(
SELECT
CASE WHEN seq_fam = 0 THEN
rank() OVER (ORDER BY nome)
ELSE
NULL
END AS ordem,
cod_associado,
seq_fam,
nome,
num_convenio,
cod_proposta,
cod_status,
dt_nasc,
idade
FROM
associado
ORDER BY
cod_associado,
seq_fam,
nome
)
SELECT
CASE WHEN ordem IS NULL THEN
(SELECT a.ordem FROM associado a
WHERE
a.num_convenio = ascd.num_convenio AND
a.cod_proposta = ascd.cod_proposta AND
a.cod_associado = ascd.cod_associado AND
a.seq_fam = 0 AND a.ordem IS NOT NULL)
ELSE
ordem
END as ordem,
cod_associado,
seq_fam,
nome::CHAR(10) AS nome,
num_convenio,
cod_proposta,
cod_status,
dt_nasc,
idade
FROM
associado ascd
WHERE
num_convenio = ascd.num_convenio AND
cod_proposta = ascd.cod_proposta AND
cod_associado = ascd.cod_associado AND
seq_fam = ascd.seq_fam
ORDER BY
1,
cod_associado,
seq_fam;
Olha o resultado:
select ordem, cod_associado, seq_fam, nome from view_associado_smc where
num_convenio = 251 limit 10;
1293 414 0 ABNEIDA DE
1293 414 1 FABIO ALEX
1293 414 2 LUIZA DE A
1293 414 3 IZADORA DE
2018 100289 0 ADAMS MAR
3720 1071 0 ADOLPHO CY
4274 100330 0 ADRIANA LA
4274 100330 1 ALEXANDRE
4274 100330 2 MANUELA L
4274 100330 3 HEITOR LAG
Funcionou mas ficou muito lenta.
Acho que este subselect é o problema:
(SELECT a.ordem FROM associado a
WHERE
a.num_convenio = ascd.num_convenio AND
a.cod_proposta = ascd.cod_proposta AND
a.cod_associado = ascd.cod_associado AND
a.seq_fam = 0 AND a.ordem IS NOT NULL)
Fiz com Inner Join mas o resultado não foi o mesmo...
Alguma sugestão?
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral