Join'le veri çekmek ve raporlamak

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ı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Join'le veri çekmek ve raporlamak

Mesaj gönderen haydarxxx »

Slm arkadaşlar derdim join ama nasıl bilmiyorum.Forumda bir çok yerde geçiyor ama bir türlü uygulamasını yapamadım :? Master ve detail tablodan nasıl veri çekeceğim sorusuna yanıt arıyorum ve bu konuda acemiyim tablom aşağıda

Kod: Tümünü seç

TBL_OGRENCI    TABLOM (MASTER) 
OGRENCI_ID * 
ADI_SOYADI 
SINIFI 

TBL_DERSLER    TABLOM (DETAY) 
DERS_ID 
OGRENCI_ID * 
DERS_GIRIS 

* Olanlar ortak keyleri taşıyrlar (PK) 
master verilerim
OGRENCI_ID          ADI_SOYADI              SINIFI 
1                        abc                  2A 
2                        abd                 2C 
3                        abe                 2A
4                        abf                  2D 
detay verilerim
DERS_ID               OGRENCI_ID             DERS_GIRIS 
 1                         1                  TURKCE 
2                          1                MATEMATIK 
3                          1                RESIM 
4                          2                  TURKCE 
5                          2                  FEN 
6                          2                RESIM 
7                          3                  TURKCE 
8                          3                MATEMATIK 
9                          3                 FEN 
10                        4                 TURKCE
11                        4                MATEMATIK 
12                        4               FEN 


Birinci sorum değişken olacak şekilde örneğin yanlızca 2A sınıfına giden ve TURKCE dersine katılan verileri JOİN ile nasıl çekiyoruz.

İkinci sorum QRaporda subdetail bantının datasetlerini nasıl uyarlamalıyız ki bu çektiğimiz verileri aşağıdaki gibi rapor alalım.

Kod: Tümünü seç

          ADI_SOYADI               SINIFI          DERS_GIRIS 
               abc                   2A               TURKCE 
               abe                    2A                TURKCE 
                  
.Teşekkür ediyorum
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Lütfen yardım :cry:
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

JOIN kullanımının ya da birden fazla tablonun birleştirilmesi genel yapısı şöyledir;

Kod: Tümünü seç

select tablo1.*, tablo2.* from tablo1
left join tablo2 on tablo1.iliskilenecekalan = tablo2.iliskilenecekalan
Bu genel yapıdan sonra where, group by, order by gibi diğer eklemeler de yapılabilir.

JOIN de amaç her iki tablodaki ortak ilişkili alanları birbirine eşleyip o kayıtları tablolardan çekmektir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Hocam özür dileyerk soruyorum kodu kendime göre şöyle düzenledim

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
begin
IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('SELECT TBL_OGRENCI.ADI_SOYADI, TBL_OGRENCI.SINIFI, TBL_DERSLER.DERS_KATILIM  TBL_OGRENCI  LEFT JOIN    TBL_DERSLER ON TBL_OGRENCI.OGRENCI_ID=TBL_DERSLER.OGRENCI_ID where DERS_KATILIM=''TURKCE'' ');
IBQuery3.open;
form9.quickrep1.preview ;
end;

verileri doğrumu çektiriyorum bilmiyorum ama IBQuery3 e bağlı dbgridte hiç bir veri gözükmediği gibi buradan raporun ön izlemsinede geçemiyorum hatam nerede;
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
begin
IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('SELECT TBL_OGRENCI.ADI_SOYADI, TBL_OGRENCI.SINIFI, TBL_DERSLER.DERS_KATILIM  TBL_OGRENCI  LEFT JOIN    TBL_DERSLER ON TBL_OGRENCI.OGRENCI_ID=TBL_DERSLER.OGRENCI_ID where DERS_KATILIM=''TURKCE'' ');
IBQuery3.open;
form9.quickrep1.preview ;
end;
yukaridaki kodunu @rsimsek ustamın verdiği şekilde uyarlamamışsın gibi görünüyor. From kısmı yok. bu yüzden hangi tabloyu alacağını bilemiyor ve bekliyor sanırım.

Kod: Tümünü seç


select.......from TBL_OGRENCI......
kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

:oops: hocam çok sağol ya nasıl göremiyorum :x :çok teşekkür ediyorum.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

IBQuery5.close;
IBQuery5.SQL.Clear;
IBQuery5.SQL.Add('Select TBL_OGRENCI.ADI_SOYADI, TBL_OGRENCI.SINIFI,TBL_OGRENCI.KALAN,TBL_OGRENCI.KURS_NO, TBL_DERSLER.DERS_KATILIM FROM TBL_OGRENCI  LEFT JOIN    TBL_DERSLER ON TBL_OGRENCI.OGRENCI_ID=TBL_DERSLER.OGRENCI_ID where SINIFI='+#39+DBLookupComboBox3.text+#39+' AND DERS_KATILIM='+#39+DBLookupComboBox4.text+#39+'  ORDER BY KURS_NO ASC ');
IBQuery5.open;
FORM9.QRLabel4.Caption:=inttostr(IBQuery5.Fields[0].AsInteger);
form9.quickrep1.preview ;
JOİN le çektiğim bu şartlardaki kayıt sayısını arıyorum yapamadım from yerine count ifadesi denedim olmadı bu koşuldaki kayıt sayısını nasıl alabiliriz.

bir ikinci ilave sorumda TBL_OGRENCI.KALAN bölümündeki KALAN alanı desimal (para alanı) raporlama sonunda buradan gelen veriler raporda nasıl desimal gösterilir örneğin benim girdiğim değer 1.230,45 TL ama bu raporda 1230,45 olarak gözüküyor (1.230,45 TL gözükmesini istiyorum) bunu nasıl düzenliyoruz.
Cevapla