Veri çekme sql ile filtreleme
Veri çekme sql ile filtreleme
Arkadaşlar bu konuda yardımcı olursanız sevinirim. Şöyle bir sorunum var. Veri tabanımda bir sınıfa ait öğrenci listeleri öğrencilerin isminin karşısında dersler sütunu var Dersler sütununda Türkçe, Matematik, Fen vb. isimler diğer bir sütun ise bu derslerden öğrencilerin aldığı notlar var. Kısacası ben her dersten ilk üç sıraya giren başarılı öğrencileri select yapmak istiyorum. SQL ile yapmaya çalıştım ama toplam kayıtların ilk üçünü getiriyor halbuki ben derslere göre ilk üçünü getirmek istiyorum. Selam ve saygılarımla. Yardımınızı bekliyorum.
En son atila1970 tarafından 04 Tem 2014 07:21 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Re: Çok Acil Veri çekme sql ile filtreleme
Select öğrenci_adi , dersler, not from öğrenci_listesi order by dersler asc, not desc rows 1 to 3 deyimi ile sadece veri tabanındaki ilk üç kayıt listeleniyor. Benim istediğim derslerdeki ders adına göre ilk üç kayıt.
- greenegitim
- Üye
- Mesajlar: 713
- Kayıt: 28 Nis 2011 10:33
- Konum: İstanbul
Re: Çok Acil Veri çekme sql ile filtreleme
senin istediğin çıktının örneğini paylaşabilirmisin
aliveli matematik 100
aliveli fen 100
ayşe matematik 99
gibimi
distinct ve group by i araştırabilirsin.
aliveli matematik 100
aliveli fen 100
ayşe matematik 99
gibimi
distinct ve group by i araştırabilirsin.
Mücadele güzelleştirir!
Re: Çok Acil Veri çekme sql ile filtreleme
Ekran görüntüsünü excelde hazırladım. Umarım açıklayabilmişimdir sorunumu. Saygılarımla.
- Dosya ekleri
-
- Ekran görüntüsü
- veri.jpg (10.09 KiB) 4731 kere görüntülendi
Re: Çok Acil Veri çekme sql ile filtreleme
VERİTABANI
ÖĞRENCİ ADI DERSLER NOT
ALİ Türkçe 95
AHMET Türkçe 100
DURSUN Türkçe 55
MEHMET Türkçe 45
SAİT Türkçe 80
VELİ Türkçe 60
SERDAR Türkçe 90
ALİ Matematik 80
AHMET Matematik 98
DURSUN Matematik 55
MEHMET Matematik 45
SAİT Matematik 76
VELİ Matematik 60
SERDAR Matematik 90
ALİ Fen 75
AHMET Fen 65
DURSUN Fen 90
MEHMET Fen 45
SAİT Fen 56
VELİ Fen 60
SERDAR Fen 92
SQL Çalıştıktan sonra Gelmesi gereken bilgi
ÖĞRENCİ ADI DERSLER NOT
AHMET Türkçe 100
ALİ Türkçe 95
SERDAR Türkçe 90
AHMET Matematik 98
SERDAR Matematik 90
ALİ Matematik 80
SERDAR Fen 92
DURSUN Fen 90
ALİ Fen 75
ÖĞRENCİ ADI DERSLER NOT
ALİ Türkçe 95
AHMET Türkçe 100
DURSUN Türkçe 55
MEHMET Türkçe 45
SAİT Türkçe 80
VELİ Türkçe 60
SERDAR Türkçe 90
ALİ Matematik 80
AHMET Matematik 98
DURSUN Matematik 55
MEHMET Matematik 45
SAİT Matematik 76
VELİ Matematik 60
SERDAR Matematik 90
ALİ Fen 75
AHMET Fen 65
DURSUN Fen 90
MEHMET Fen 45
SAİT Fen 56
VELİ Fen 60
SERDAR Fen 92
SQL Çalıştıktan sonra Gelmesi gereken bilgi
ÖĞRENCİ ADI DERSLER NOT
AHMET Türkçe 100
ALİ Türkçe 95
SERDAR Türkçe 90
AHMET Matematik 98
SERDAR Matematik 90
ALİ Matematik 80
SERDAR Fen 92
DURSUN Fen 90
ALİ Fen 75
Re: Çok Acil Veri çekme sql ile filtreleme
Basit düşünürsek (Dersler değişken olmadığına göre)
işini görecektir diye düşünüyorum.
Kod: Tümünü seç
With AdoQuery1 do
begin
SQL.Clear;
SQL.Add('(SELECT TOP 3 * FROM TABLO WHERE DERSLER = ''Türkçe'' ORDER BY NOTLAR DESC)');
SQL.Add('UNION');
SQL.Add('(SELECT TOP 3 * FROM TABLO WHERE DERSLER = ''Matematik'' ORDER BY NOTLAR DESC)');
SQL.Add('UNION');
SQL.Add('(SELECT TOP 3 * FROM TABLO WHERE DERSLER = ''Fen'' ORDER BY NOTLAR DESC)');
SQL.Add('ORDER BY DERSLER ASC, NOTLAR DESC, ISIMLER ASC');
Active := True;
end;
Re: Çok Acil Veri çekme sql ile filtreleme
Veri tabanım firebird ayrıca bu söylediğiniz kodu sql in içine yazmak istiyorum IBQuery kullanıyorum. Kodu ona göre düzenlerseniz sevinirim.
Re: Çok Acil Veri çekme sql ile filtreleme
atila1970 yazdı:Veri tabanım firebird ayrıca bu söylediğiniz kodu sql in içine yazmak istiyorum IBQuery kullanıyorum. Kodu ona göre düzenlerseniz sevinirim.
deyince biliyorsun sandım.atila1970 yazdı:SQL ile yapmaya çalıştım ama toplam kayıtların ilk üçünü getiriyor halbuki ben derslere göre ilk üçünü getirmek istiyorum. Selam ve saygılarımla. Yardımınızı bekliyorum.
TOP yerine FIRST kullanma kafi..
Kod: Tümünü seç
With IBQuery1 do
begin
SQL.Clear;
SQL.Add('(SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Türkçe'' ORDER BY NOTLAR DESC)');
SQL.Add('UNION');
SQL.Add('(SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Matematik'' ORDER BY NOTLAR DESC)');
SQL.Add('UNION');
SQL.Add('(SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Fen'' ORDER BY NOTLAR DESC)');
SQL.Add('ORDER BY DERSLER ASC, NOTLAR DESC, ISIMLER ASC');
Active := True;
end;
Kod: Tümünü seç
(SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Türkçe'' ORDER BY NOTLAR DESC)
UNION
(SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Matematik'' ORDER BY NOTLAR DESC)
UNION
(SELECT FIRST 3 * FROM TABLO WHERE DERSLER = ''Fen'' ORDER BY NOTLAR DESC)
ORDER BY DERSLER ASC, NOTLAR DESC, ISIMLER ASC
Re: Çok Acil Veri çekme sql ile filtreleme
QUERY içine yazıyorum olmuyor. Yazdığınız kodun tek satırı çalışıyor uinon a geltiğinde hata veriyor.
Re: Çok Acil Veri çekme sql ile filtreleme
atila1970 yazdı:QUERY içine yazıyorum olmuyor. Yazdığınız kodun tek satırı çalışıyor uinon a geltiğinde hata veriyor.
UNION satırlarını UNION ALL yapın çalışır.
Internetten SQL kod araştırırken, veritabanları arasındaki nüans farklılıklarını mutlaka bir yere not edin. Bu gibi küçük sorunların üstesinden rahatlıkla gelebilirsiniz.
Re: Veri çekme sql ile filtreleme
konuyu eleman arıyanlar bölümüne taşıycam, şurasınıda şöyle olsun tarzında bir mesaj daha gelirse
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: Veri çekme sql ile filtreleme
Çok tşk. ederim yardımlarınız için. Sorun hal oldu. Aşağıdaki şekilde yapınca istediğim şekilde oldu
select first 3 * from Dersler where dersler='Türkçe'
Union
select first 3 * from Dersler where dersler='Fen'
Union
select first 3 * from Dersler where dersler='Matematik'
order by 2,not desc
select first 3 * from Dersler where dersler='Türkçe'
Union
select first 3 * from Dersler where dersler='Fen'
Union
select first 3 * from Dersler where dersler='Matematik'
order by 2,not desc