Fórum Caso sem solução a três semanas #43033

12/03/2004

0

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

Responder

Posts

12/03/2004

Afarias

|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+


Responder

Gostei + 0

12/03/2004

Sremulador

? é ? 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:



Responder

Gostei + 0

12/03/2004

Afarias

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+


Responder

Gostei + 0

12/03/2004

Sremulador

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.


Responder

Gostei + 0

12/03/2004

Afarias

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+


Responder

Gostei + 0

12/03/2004

Vagner Wolf

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


Responder

Gostei + 0

13/03/2004

Sremulador

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:


Responder

Gostei + 0

13/03/2004

Afarias

|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+


Responder

Gostei + 0

13/03/2004

Sremulador

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:


Responder

Gostei + 0

13/03/2004

Afarias

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+


Responder

Gostei + 0

16/03/2004

Sremulador

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


Responder

Gostei + 0

17/03/2004

Sremulador

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


Responder

Gostei + 0

17/03/2004

Afarias

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+


Responder

Gostei + 0

17/03/2004

Sremulador

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 ?


Responder

Gostei + 0

17/03/2004

Afarias

|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+


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar