Fórum Caso sem solução a três semanas #43033
12/03/2004
0
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
Curtir tópico
+ 0Posts
12/03/2004
Afarias
? é ? 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
12/03/2004
Sremulador
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
12/03/2004
Afarias
T+
Gostei + 0
12/03/2004
Sremulador
´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
12/03/2004
Afarias
mas olha, só pra completar, achei q a consulta envolvia + que 1 tabela!!! pq vc só postou 1??
T+
Gostei + 0
12/03/2004
Vagner Wolf
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
13/03/2004
Sremulador
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
13/03/2004
Afarias
|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
13/03/2004
Sremulador
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
13/03/2004
Afarias
O primeiro MDME entre qualquer um existente para o MDPD ou só os MDME entre aqueles ditados pelos parâmetros passados??
T+
Gostei + 0
16/03/2004
Sremulador
Gostei + 0
17/03/2004
Sremulador
Gostei + 0
17/03/2004
Afarias
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
17/03/2004
Sremulador
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
17/03/2004
Afarias
|me mostrar o 56 do MDME 1 entendeu ?
Não é o q o procedimento que escrevi está fazendo???
T+
Gostei + 0