- Este tópico contém 7 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 6 meses atrás por
burga.
-
AutorPosts
-
2 de setembro de 2010 às 10:08 pm #95879
batofao
Participanteboa tarde,
tenho uma consulta
SELECT decode(g1,null,g2,g1),vg1,vg2,pm1,pm2
FROM
(SELECT VG.GRUPO g1, VG.POS_PERC vg1, VG.PERC_MARGINAL pm1 FROM VARS V , VAR_DEFINICOES VD, VAR_GRUPOS VG, ZXT_RES_FUNDOS ZX
WHERE V.NOME_VAR = (ZX.ESTUDOS) AND zx.nome_cliente = :NOME_CLIENTE AND
V.COD_VAR = VD.COD_VAR AND V.COD_VAR = VG.COD_VAR AND VD.DATA_COTACAO = (:data_inicial) ) MES1FULL OUTER JOIN
(SELECT VG.GRUPO g2, VG.POS_PERC vg2, VG.PERC_MARGINAL pm2 FROM VARS V, VAR_DEFINICOES VD, VAR_GRUPOS VG, ZXT_RES_FUNDOS ZX
WHERE V.NOME_VAR = (ZX.ESTUDOS) AND zx.nome_cliente = :NOME_CLIENTE AND
V.COD_VAR = VD.COD_VAR AND V.COD_VAR = VG.COD_VAR AND VD.DATA_COTACAO = (:data_final) ) MES2
ON MES1.g1 = MES2.g2
ORDER BY PM2 DESCo que acontece, essa consulta me tras os dados de uma relatorio, só que por exemplo se o cliente tem 2 relatorios ele me traz os dados dos dois relatorios só que tudo misturado, eu precisava que ele rodasse o primeiro, me mostrasse os dados depois disso rodasse o segundo.. alguem tem uma dica comoposso fazer isso..
obg
2 de setembro de 2010 às 11:36 pm #95882diegomello
ParticipanteFaz dois relatórios e chama um depois do outro.
RUN_PRODUCT(... REP_A ...);
RUN_PRODUCT(... REP_B ...);
2 de setembro de 2010 às 11:39 pm #95883batofao
Participantenão entendi como que consigo aplicar nesse caso
obg,
3 de setembro de 2010 às 8:01 am #95892burga
Participantesó que tudo misturado
Se puder explicar melhor o que significa TUDO MISTURADO que você não quer que seja, com exemplo, facilitaria bastante a gente a te ajudar.
rodasse o primeiro, me mostrasse os dados depois disso rodasse o segundo
E também um exemplo de como deve ser o resultado que você espera…
Eu imagino usar um
row_number() over (partition by MES1.g1 order by PM2 DESC)
na sua conuslta, e na primeira query apresentar quando o retorno disso é igual a 1 e na segunda igual a 2… Mas não sei se entendi direito o que você qur, por isso peço exemplos do que é o tudo misturado que está retornando e do que você deseja que retorne…3 de setembro de 2010 às 3:16 pm #95897batofao
Participanteo que eu quero dizer com tudo misturado é o seguinte, aquele primeiro select me traz o resultado esperado de um determinado estudo, esse estudo tem um ‘nome’
tenho uma outra tabela que server mais ou menos como um cadastro, que vai me indicar o nome do cliente e o nome do estudo que ele tem, se o cliente tem só um estudo blz, ele me traz os dados desse estudo, porem se o cliente tem mais de um estudo, ele me traz os dados do dois estudos só que ” todos o dados do 1 estudo e do segundo misturado”
então preciso que ele me traga os dados do 1 estudo, depois os dados do segundo estudo…não sei se fui mais claro agora…
obg.
3 de setembro de 2010 às 5:59 pm #95908burga
ParticipanteDeixa eu ver se entendi agora.
No select você faz um full outer join entre outras duas consultas…
Vou chutar que o nome do estudo deve estar nestas colunas V.NOME_VAR e (ZX.ESTUDOS).
No FULL OUTER JOIN você apenas utiliza os grupos como atributo de comparação (MES1.g1 = MES2.g2). O correto, pra não misturar os estudos seria, em cada select você retornar também o V.NOME_VAR (nome do estudo) e usá-lo como atributo de comparação junto do grupo no FULL OUTER JOIN:
SELECT VG.GRUPO g1, VG.POS_PERC vg1, VG.PERC_MARGINAL pm1, V.NOME_VAR nv1
…
FULL OUTER JOIN
SELECT VG.GRUPO g2, VG.POS_PERC vg2, VG.PERC_MARGINAL pm2, V.NOME_VAR nv2
…
ON MES1.g1 = MES2.g2 AND MES1.nv1 = MES2.nv2
ORDER BY PM2 DESCSeria isto?
3 de setembro de 2010 às 6:39 pm #95909batofao
Participanteisso mesmo mesmo meu amigo, muito obrigado,
só mais uma duvida no final de cada relatorio tem como colocar um quebra de linha ou alguma coisa parecida…
do mais muito obrigado…
3 de setembro de 2010 às 9:35 pm #95923burga
ParticipanteEntão, o que seria cada relatório? Porque pro meu entendimento, o retorno da sua consulta inteira seria apenas um relatório… Como seria esta divisão?
-
AutorPosts
- Você deve fazer login para responder a este tópico.