Delphi Can

Orjinalini görmek için tıklayınız: Aynı kayıt
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
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.. Smile) ama işi çooookkk uzatırsınız Smile
(17-12-2022, Saat: 14:01)declare Adlı Kullanıcıdan Alıntı: [ -> ]@i  integer
declare
@Temp table (Urun_Adi varchar(20), Adet int)
set @i=1
while @i<=3
begin
insert into @Temp (Urun_Adi,Adet)
select 'Elma',1
set @i=@i+1
end
set @i=1
while @i<=5
begin
insert into @Temp (Urun_Adi,Adet)
select 'Armut',1
set @i=@i+1
end
insert into @Temp (Urun_Adi,Adet)
select 'Ayva',1
select Urun_Adi,COUNT(*) Adet from @Temp group by Urun_Adi
select Urun_Adi ,count(*)-1 [1_eksigi]   from @Temp t group by t.Urun_Adi having (count(*)-1)>0 
(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...
Sayfalar: 1 2