GARANTIR DESCONTO

Fórum Sql de Comparacao Numa Mesma Tabela #49443

20/02/2005

0

Amigos,boa noite.

é o seguinte:

tenho uma tabela, FB1.5
campos:
TPTABELA,
TPREF
TPPRECO

80.000 Registros
Registros:
TPTABELA TPREF TPPRECO
1)20050217 00001 10,00
2)20050217 00002 17,00
3)20050217 00003 6,00
etc...
100)20050117 00001 9,00
101)20050117 00002 17,00
102)20050117 00003 5,50
etc...

<é uma tabela só>

Observem.
o registro de numero (1) gostaria que fosse comparado com o registro (100) e assim por diante.

*detalhe, nao posso gerar 2 tabelas, estas informacoes sempre estarao na mesma tabela, porem, preciso analisar um registro com outro na mesma tabela.



ja montei uma rotina que eu analizo o primeiro registro e procuro pelo outro no restante da tabela, funcionou perfeitamente.

rotina que montei:
SQL1. select * from <tabela> where <tabela> = TPTABELAQUALQUER
SQL2. select * from <tabela2> where <tabela2> = TPTABELAQUALQUER AND
TPREF = :REFERENCIA

while not SQL1.eof do
begin
SQL2.parambyname(´REFERENCIA´).ASSTRING = SQL1.FieldByname(´TPREF´).ASSTRING;
SQL2.open;
pego as informacoes aqui e comparo com a SQL1.
SQL1.next;
end;

esta rotina ae funfou perfeitamente.

mas tem jeito de fazer num query so ? (motivo) para ser mais rapido.


Obrigado a todos.


Pedih

Pedih

Responder

Posts

21/02/2005

Afarias

bom, deveria haver uma chave entre os registros, mas como não me parece q há, vc poderia fazer um procedimento ou

uma consulta na forma:

select * from tabela t1
inner join tabela t2 on (t2.TPREF = t1.TPREF
and t2.TPTABELA t1.TPTABELA)
where t1.TPTABELA = 20050217;


T+


Responder

Gostei + 0

22/02/2005

Pedih

bom, deveria haver uma chave entre os registros, mas como não me parece q há, vc poderia fazer um procedimento ou uma consulta na forma: select * from tabela t1 inner join tabela t2 on (t2.TPREF = t1.TPREF and t2.TPTABELA <> t1.TPTABELA) where t1.TPTABELA = 20050217; T+


Afarias, bom dia.
funcionou, entre aspas.

veja como montei a instrucao
SELECT * FROM FURTABELAPRECO T
INNER JOIN FURTABELAPRECO T2
ON(T.TPREF = T2.TPREF)
WHERE
T.TPTABELA = ´20050221´
AND
T2.TPTABELA = ´20050117´
AND
T.TPPRECO <> T2.TPPRECO
ORDER BY T.TPREF

porem.
veja: estou buscano as informacoes numa mesma tabela, e comparandoas.

mas, se um item tiver no primeiro select e no inner join ele nao aparecer, nao aparece no resultado, e vice-versa.
Preciso que: se algum item aparecer em qualquer uma, ele tem que mostrar.

Exemplo
Resultado do select principal tem um item que pertence TPTABELA = ´ 20050221´, este item nao encontra em TPTABELA = ´20050117´ , preciso que ele mostre este item que ficou aparecendo somente em um lado da sql, e vice-versa.

Importante, naoposso desmembrar a tabela, porque hoje, so existe ´ 20050221´ e ´ 20050117´, esta tabela ir´a crescer toda semana, e cada semana o campo TBTABELA receber´a este novo valor (data do dia) em forma de string. Entendeu ?

daqui 2 meses, por exemplo,
terei.
20050117
20050221
20050228
20050305
etc...
(sem limites)

e sempre terei a possibilidades de comparar um item de uma tabela com um outro na mesma tabela.Entendeu?
Obrigado.


Responder

Gostei + 0

22/02/2005

Afarias

troque o inner join por um full outer join


T+


Responder

Gostei + 0

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

Aceitar