Selamlar, Sqlite databasede aynı Kayıttan birden fazla olanları ListView'e almak istiyorum ancak yapamadım bu sorunu nasıl? çözerim.
Örnek:
Elma 3 tane varsa 2 listelenecek
Armut 5 tane varsa 4 listelenecek
Ayva 1 varsa
listelenmeyecek
try
FDQ.Active := False;
FDQ.Close;
FDQ.SQL.Clear;
FDQ.SQL.Add('Select * From URUNLER Order By UrunName Asc');
FDQ.Open;
while Not FDQ.Eof do
begin
LItem := ListView1.Items.Add;
LItem.Data['UrunName'] := FDQ.FieldByName('UrunName').AsString;
FDQ.Next;
end;
ListView kullanmadım ama ListBox kullanırsanız ListBox'un Sorted özelliğini TRUE yapın. Sonra ListBox1.items.itemindex(stringDegisken) = -1 then ListBox1.items.add(stringDegisken);
şeklinde çalışır.
sql de gorup by ve having cümleciklerini araştırın..
SELECT COUNT(urunname) as adet, urunname
FROM urunler
GROUP BY urunname
HAVING COUNT(adet) >1
order by urunname;
(17-12-2022, Saat: 21:37)mcuyan Adlı Kullanıcıdan Alıntı: [ -> ]SELECT COUNT(urunname) as adet, urunname
FROM urunler
GROUP BY urunname
HAVING COUNT(adet) >1
order by urunname;
FDQ.SQL.Add('Select ID, URUNKODU, Count(*) From URUNLER Group By URUNKODU Having Count(URUNKODU)>1 Order By URUNKODU Asc');
Hocam sizin yağlaştığınız kodalarıda denedim kendimde bir şeyler yaptım ama olmadı.
Aynı URUNKODU olan ürünleri 1 taneden fazla ise ASC ile sıralı olarak listelemek istiyorum.
Select de
Count(*) Having de ise
count(URUNKODU) kullanmışınız. Select te ne kullanırsanız Having de aynısını kullanmanız gerekiyor
ikisinde de Count(*) veya count(URUNKODU) kullanmalısınız. Tercih sizin
1- FDQ.SQL.Add('Select ID, URUNKODU, Count(*) From URUNLER Group By URUNKODU Having Count(*) >1 Order By URUNKODU Asc');
2- FDQ.SQL.Add('Select ID, URUNKODU, Count(URUNKODU) From URUNLER Group By URUNKODU Having Count(URUNKODU) >1 Order By URUNKODU Asc');
bu şekilde 1 den cok olanları sildiriyorum işinize yarayabilir.
adoQuery1.Sql.add('DELETE FROM tablo1 WHERE NOT kimlik IN (SELECT MIN(kimlik)FROM tablo1 GROUP BY alan1)') ;
@
Mete hocam burda olay delphi de değil SQL de. SQL ile çözmeniz gerek işinizi. Haa illa ki uzun yolda delphi ile ömzeyim diyorsanız bi array tanımlayın her ürüne bi count verin..

) ama işi çooookkk uzatırsınız

(19-12-2022, Saat: 16:06)sefere55 Adlı Kullanıcıdan Alıntı: [ -> ]bu şekilde 1 den cok olanları sildiriyorum işinize yarayabilir.
adoQuery1.Sql.add('DELETE FROM tablo1 WHERE NOT kimlik IN (SELECT MIN(kimlik)FROM tablo1 GROUP BY alan1)') ;
Teşekkür ederim fakat bana uymadı neredeyse tüm kayıtları sildi.
(19-12-2022, Saat: 15:53)ugorkem Adlı Kullanıcıdan Alıntı: [ -> ]Select de Count(*) Having de ise count(URUNKODU) kullanmışınız. Select te ne kullanırsanız Having de aynısını kullanmanız gerekiyor
ikisinde de Count(*) veya count(URUNKODU) kullanmalısınız. Tercih sizin
1- FDQ.SQL.Add('Select ID, URUNKODU, Count(*) From URUNLER Group By URUNKODU Having Count(*) >1 Order By URUNKODU Asc');
2- FDQ.SQL.Add('Select ID, URUNKODU, Count(URUNKODU) From URUNLER Group By URUNKODU Having Count(URUNKODU) >1 Order By URUNKODU Asc');
Teşekkür ederim güzel çalışıyor. Fakat istediğim gibi yapamadım bir türlü.
Örnek:
Elma 3 tane varsa ise 2 listelenecek
Armut 5 tane varsa ise 4 listelenecek
Ayva 1 varsa listelenmeyecek
Sizin verdiğiniz örnek kodlarda sadece aynı üründen 1 tanesi listeleniyor...