şarta bağlı kayıt sayısı

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

şarta bağlı kayıt sayısı

Mesaj gönderen y.kulac »

s.a.
firebird 2.03 veritabanı kullandım.
tablo adı BILGILER
alan adı YAKINLIK

kayıt girilirken aile reisi için = KENDİSİ
kızı için = KIZI
oğlu için = OĞLU yazılıyor.
ve her aile için bir özel kod oluşturuluyor.
mesela aile kodu = ahmetyilmaz. ben sorgulama yapmak istediğim zaman çocuk sayısı 1 ve üzeri yada 2 ve üzeri yada 3 ve üzeri gibi sorgulama yapmak istiyorum. aile sayısını bulmak kolay

Kod: Tümünü seç

ibquery17.Close;
ibquery17.SQL.Clear;
ibquery17.SQL.Add('Select count(YAKINLIK) AS TSAYI From BILGILER');
ibquery17.SQL.Add('Where YAKINLIK = ''KENDİSİ''');
ibquery17.Open;
bu sorgu bana kayıtlı aile sayısını veriyor.

peki çocuk sayısı 3 ve üzeri olan aileleri nasıl bulabilirm.
kayıt girerken 2 çocuk 5 çocuk diye sayı yazmıyoruz.
KIZI ve OĞLU yazıyoruz.

Kod: Tümünü seç

baba = kendisi
annne = eşi
oğlu = oğlu   1. çocuk
oğlu = oğlu   2. çocuk
kızı = kızı     3. çocuk
oğlu = oğlu  4. çocuk
kod= baba1980 // bu kod her ailenin kod hanesinde var.
bunun gibi binlerce kayıt var. bu yazılanlara göre 3 ve üstü çocuk sahihibi aileleri nasıl bulabilirim. saatlerce kafa yoruyorum ama işin içinden çıkamadım.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

A.S.

Öncelikle bu tarz bilgiler için ID'ler (integer) kullanmanı veya en azından oğlu için O, kızı için K gibi CHAR(1) alan kullanmanı tavsiye ederim.

Bunu hatırlattıktan sonra group by ve having ile sorununu çözebilirsin. Yapını tam bilmediğim için anladığım kadarıyla yazıyorum, sen biraz düzenleyerek sonuca gidersin.

Kod: Tümünü seç

select aile_adi, yakinlik, count(*)
from bilgiler
where yakinlik in ('OĞLU', 'KIZI')
group by aile_adi, yakinlik
having count(*) >= 3 /* 3 çoçuk ve üzeri */
Kolay gelsin.
Cevapla