Caso sem solução a três semanas

Firebird

12/03/2004

A três semanas que eu posto tópicos aqui e em outros locais, já procurei ajuda dos colegas do msn, icq e ninguem soube me dar uma solução concreta meu caso e o seguinte.

Tenho um tabela pai

MECD INTEGER NOT NULL, COD
MEDS DESCRICAO /* VARCHAR(50) */ DESCRIÇÃO

Tabela filha

MDME INTEGER NOT NULL, TABELA PAI
MDPD INTEGER NOT NULL, TABELA DE PRODUTO
MDDS DESCRICAO /* VARCHAR(50) */, DESCRIÇÃO AUTERNA
MDVV VALOR /* NUMERIC(15,4) */, VALOR...
MDVE VALOR /* NUMERIC(15,4) */,
MDBI VARCHAR(10),
MDDA DATE,
MDCX VARCHAR(15) CHARACTER SET NONE


Tenho que mostrar um grid com a consulta da tabela filha tenho que passar dois parametros

Se não tiver na tabela pai 1 MDME então verificar se tem na 2 MDME e mostrar se for o caso, eu tentei diversas maneiras

View, procedure, select normal e nada no ultimo caso eu chegie bem perto mas não consegui

/procedure
FOR SELECT DISTINCT MDPD FROM especifica_med_detalhe EMD
WHERE ((MDME=:TAB1) or (MDME=:TAB2))
into :CODMED DO
suspend;
Até aqui ele me retorna bacana porem quando dou o select com um join na mesma tabela para recuperar o valor, descrição...

/Select com join
select CODMED, PDDS from PROCEDMATMAD (0,2)
INNER JOIN PRODUTO PDT ON (PDT.PDCD=CODMED)
INNER JOIN especifica_med_detalhe EMD ON (EMD.MDPD=PDT.PDCD)

ele volta a me retornar dois produtos novamente

[b:b15bd3353b]heeeeeeeeeeeeelllllllllllllppppppppppppp............[/b:b15bd3353b]

:( :( :( :( :cry: :cry: :cry: :( :( :( :(


Sremulador

Sremulador

Curtidas 0

Respostas

Afarias

Afarias

12/03/2004

|A três semanas que eu posto tópicos aqui e em outros locais

? é ? 1ª vez q vejo esta questão


|Se não tiver na tabela pai 1 MDME então verificar se tem na 2 MDME e
|mostrar se for o caso, eu tentei diversas maneiras

vc tem q explicar melhor... não entendi nada!!!


|select CODMED, PDDS from PROCEDMATMAD (0,2)
|INNER JOIN PRODUTO PDT ON (PDT.PDCD=CODMED)
|INNER JOIN especifica_med_detalhe EMD ON (EMD.MDPD=PDT.PDCD)
|ele volta a me retornar dois produtos novamente

hummm... o problema está aqui!! Certo, ele retorna 2 produtos novamente... e deveria retornar quantos????

explique o q vc pretende com o select acima ou o q está acontecendo, de outra forma fica difícil tentar ajudar


T+


GOSTEI 0
Sremulador

Sremulador

12/03/2004

? é ? 1ª vez q vejo esta questão


Eu já postei com outras descrição

|Se não tiver na tabela pai 1 MDME então verificar se tem na 2 MDPC e
|mostrar se for o caso, eu tentei diversas maneiras

Acontece que a tabela pai MDME tem 4 cods chave mestre 1,2,3,4
na filha tem o campo MDPC que são os produtos

|select CODMED, PDDS from PROCEDMATMAD (0,2)
|INNER JOIN PRODUTO PDT ON (PDT.PDCD=CODMED)
|INNER JOIN especifica_med_detalhe EMD ON (EMD.MDPD=PDT.PDCD)
|ele volta a me retornar dois produtos novamente

hummm... o problema está aqui!! Certo, ele retorna 2 produtos novamente... e deveria retornar quantos????

Apenas um de cada
1
2
3
4
5
6

e esta retornando

1
2
2
3
3
4
4
5
6
7


Contece que alguns tem na segunda tabela pesquisada

explique o q vc pretende com o select acima ou o q está acontecendo, de outra forma fica difícil tentar ajudar

Acontece que eu quero que ele me retorne epenas um cod de um produto pois o produtos esta cadastrado com o mesmo cod diversas vezes apenas diferenciado pelo mestre que e o MDME. :roll:



GOSTEI 0
Afarias

Afarias

12/03/2004

Ainda não está claro para mim... pq vc não coloca a estrutura das tabelas envolvidas (apenas os campos importantes) e diz o resultado/campos q vc deseja?? -- ai dá pra tentar montar o SQL...


T+


GOSTEI 0
Sremulador

Sremulador

12/03/2004

A estrutura e esta

´EPPV´INTEGER NOT NULL,
´EPPC´INTEGER NOT NULL,
´EPDS´´DESCRICAO´,
´EPVL´´VALOR´,
´EPCX´VARCHAR(15),
´EPCH´´NUMEROS´,

eu preciso retornar somente os campo EPPV E EPPC

Sendo que não pode haver nenhuma repetição para o campo EPPC, para o campo EPPV eu passo dois parametros para que ele me retorne epenas as colunas EPPV.


GOSTEI 0
Afarias

Afarias

12/03/2004

que sopa de letrinhas... :roll: não sei como vc consegue!!!

mas olha, só pra completar, achei q a consulta envolvia + que 1 tabela!!! pq vc só postou 1??


T+


GOSTEI 0
Vagner Wolf

Vagner Wolf

12/03/2004

8) nào sei se entendi tambem mas me parece que vc tem valores duplicados por causa da data, geralmente vc pode resolver isso com uma tabela adicional que nao utilize valores que nao podem ser agrupados, por exemplo, digamos que ao inves de vc ter definido o seu campo data para registrar um DEFAULT = DataDoDia, vc possa por engano ter Registrado um DEFALT = NOW, assim se for um TIMESTAMP, ele vai guardar tando a Data quanto a Hora, ai vc nao vai poder agrupar nunca

Se o que eu disse não tem nada a ver com o que vc quer, tenta refazer o seu exemplo com um formato tipo TABELA1.Nome, TABELA1.Data, etc..., fica mais facil pra te ajudar, ja que nao conheço a sua nomeclatura.

:wink: espero ter ajudado,
t+
Vagner


GOSTEI 0
Sremulador

Sremulador

12/03/2004

Na consulta envolve várias tabelas porem eu quero filtrar somente de uma, pois eu conseguindo distinguir o resto e sopa na verdade eu tenho de distinguir o MDPD, porem tenho que mostrar de que tabela pai o MDME esta relacionado

Tabela pai

´MECD´INTEGER NOT NULL,
´MEDS´´DESCRICAO´,

Filha

´MDME´INTEGER NOT NULL,
´MDPD´INTEGER NOT NULL,
´MDDS´´DESCRICAO´,
´MDVV´´VALOR´,
´MDVE´´VALOR´,
´MDBI´VARCHAR(10),
´MDDA´DATE,
´MDCX´VARCHAR(15),

Na tabela pai Tenho as descrições

´MECD´ 1
´MEDS´ FORNECEDOR 1

´MECD´ 2
´MEDS´ FORNECEDOR 2

´MECD´ 3
´MEDS´ FORNECEDOR 3...

Na tabela Filha Tenho as descrições

´MDME´1
´MDPD´1

´MDME´1
´MDPD´2

´MDME´1
´MDPD´3

´MDME´1
´MDPD´4

´MDME´2
´MDPD´1

´MDME´2
´MDPD´2

´MDME´2
´MDPD´3...

Mas eu tenho que mostrar em um grid seleção os produtos distinguidos pelo MDPD mas quero que apareça também o MDME

Se eu aplicar o distinc assim Select MDME, MDPD from tabela ele vai repetir o MDPC e vai distinguilos pelo MDME, a questão e essa :cry:


GOSTEI 0
Afarias

Afarias

12/03/2004

|Mas eu tenho que mostrar em um grid seleção os produtos distinguidos
|pelo MDPD mas quero que apareça também o MDME

vc quer q cada MDPD apareça apenas 1 vez na listagem -- e, vc quer tb q apareça o MDME correspondente...

...entretanto, cada MDPD pode estar relacionado a vários MDME... então? como isso é possível?? qual o critério para saber qual dos MDME relacionados a um MDPD deve aparecer???


T+


GOSTEI 0
Sremulador

Sremulador

12/03/2004

bem segue assim: quando eu passar o parametro por exemplo
1ª MDME
PAR 1
2ª MDME
PAR 2

O primeiro que ele achar caso ele ache o MDPD na 1ª então e esse o que vai pra lista caso contrario ele vai buscar na 2ª se tiver ele incluir na lista da pesquisa.

Sabemos que o MDPD se repete diversas vezes mas eu quero que o primeiro que ele achar ele inclua e ignore o outro :cry:


GOSTEI 0
Afarias

Afarias

12/03/2004

Sabemos que o MDPD se repete diversas vezes mas eu quero que o primeiro que ele achar ele inclua e ignore o outro :cry:


O primeiro MDME entre qualquer um existente para o MDPD ou só os MDME entre aqueles ditados pelos parâmetros passados??



T+


GOSTEI 0
Sremulador

Sremulador

12/03/2004

os parametros são pasado para o MDME que e relacionado com a tabela mestre os detalhes tem que ser diferentes


GOSTEI 0
Sremulador

Sremulador

12/03/2004

Buaaaaaaa...... :cry: :cry: :cry: :cry:


GOSTEI 0
Afarias

Afarias

12/03/2004

Buaaaaaaa...... :cry: :cry: :cry: :cry:


Eita! hahahahaha... calma! não priemos cânico! ;)

O problema (para mim) é q vc realmente não está conseguindo ser claro no que vc deseja ... eu realmente ainda não entendi... mas vou dar um chute::


create procedure sopa_de_letrinhas (mdme1 integer, mdme2 integer)
returns (r_mdpd integer, r_mdme integer, r_meds varchar(30)) as
  declare variable flag integer;
begin

  if (mdme2 < mdme1) then
  begin
    flag = mdme1;
    mdme1 = mdme2;
    mdme2 = flag;
  end

  flag = 0;
  for select md.mdpd, md.mdme, me.meds 
       from tabela_filho md 
       inner join tabela_pai me on (me.mecd=md.mdme) 
       where me.mdme = :mdme1 or me.mdme = :mdme2
       order by me.mdme
       into :r_mdpd, :r_mdme, :r_meds
  do begin
    if (flag <> r_mdpd) then
    begin
       flag = r_mdpd;
       suspend;
    end
  end

end^



sei lá... é uma forma de fazer (o q não sei!! ;))... no mais, acho q só vc explicando melhor... :(


T+


GOSTEI 0
Sremulador

Sremulador

12/03/2004

Na minha tabela está assim

MDME MDPD
1 1
1 2
1 3
1 4
2 1
2 2
2 3
.....

então eu tenho que exibir somente um MDPD sendo que a pesquisa eu posso fazer em até duas MDME

where MDME=1 AND MAME=2

se eu fizer como acima

ele vai me retornar repetido o MDPD mas na verdade o que eu quero sim e que ele me retorne com valores distintos para o MDPD quando o MDME ele pode me retornar o primeiro que ahar tipo

se MDME 1 tiver o MDPD 56 e no MEME 2 também tiver o 56 ele só vai me mostrar o 56 do MDME 1

entendeu ?


GOSTEI 0
Afarias

Afarias

12/03/2004

|se MDME 1 tiver o MDPD 56 e no MEME 2 também tiver o 56 ele só vai
|me mostrar o 56 do MDME 1 entendeu ?

Não é o q o procedimento que escrevi está fazendo???



T+


GOSTEI 0
Sremulador

Sremulador

12/03/2004

Este forum esta com bug.


GOSTEI 0
Afarias

Afarias

12/03/2004

Este forum esta com bug.


Como assim??


T+


GOSTEI 0
Sremulador

Sremulador

12/03/2004

Pra mim ver a resposta tenho que colocar outro reply :(


GOSTEI 0
Sremulador

Sremulador

12/03/2004

Para que eu possa ve a pagina dois tenho que dar uma resposta, quando eu entro de primeira ele diz que não tem nehuma menssagem para este topico :(


GOSTEI 0
Sremulador

Sremulador

12/03/2004

A proposito não entendi como isso vai aparecer somente um registro

begin
if (TAB2 < TAB1) then
begin
FLAG = TAB1;
TAB1 = TAB2;
TAB2 = FLAG;
end
FLAG = 0;
for select MDME, MDPD, MDDS from ESPECIFICA_MED_DETALHE
where MDME =:TAB1 or MDME =:TAB2
order by MDME
into :SMDME, :SMDDS, :SMDPS
do begin
if (FLAG <> MDPD) then
begin
FLAG = MDPD;
suspend;
end
end
end^


GOSTEI 0
Afarias

Afarias

12/03/2004

eu acho q já tinha respondido aqui... mas la vai :)


|A proposito não entendi como isso vai aparecer somente um registro

realmente, pq errei no código do procedimento, onde tem

order by MDME

coloque

order by MDPD, MDME



T+


GOSTEI 0
POSTAR