Thema: Delphi Problem mit distinct

Einzelnen Beitrag anzeigen

MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#17

Re: Problem mit distinct

  Alt 15. Apr 2004, 22:34
Hi Rolf!

Um die doppelten Einträge der RechNr aus Deiner Tabelle zu löschen, schlage ich Dir folgende Lösungen vor:

A. SQL-Anweisung: Kurz und knackig, aber sie funktioniert NUR wenn die „id“ in der Tabelle eindeutig ist:
SQL-Code:
delete from tabelle
where id not in (select max(id)
                   from tabelle
               group by rechnr)
B. ein Versuch der allgemeinen Lösung:
Delphi-Quellcode:
procedure my_procedure();
var
   my_query: TQuery;
begin
   my_query := TQuery.Create(self);
   my_query.SQL.Add('select rechnr, max(id) as max_id from test003 group by rechnr');
   my_query.Prepare;
   my_query.Open;

   if my_query.RecordCount <> 0 then
   begin
      Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add('delete from test003');
      Query1.SQL.Add('where rechnr = :rechnr');
      Query1.SQL.Add(' and id <> :id');

      my_query.first;

      while not my_query.EOF do
      begin
         Query1.ParamByName('rechnr').Value := my_query.FieldbyName('rechnr').AsString;
         Query1.ParamByName('id').Value := my_query.FieldbyName('max_id').AsInteger;
         Query1.ExecSQL;

         my_query.next;
      end;
   end;

   my_query.Close;
   my_query.Destroy;
end;
Sag bescheid ob es geklappt hat....
An einer eleganteren Lösung (SQL) wäre ich auch interessiert.

Viele Grüße
Markus
  Mit Zitat antworten Zitat