distinct yardım

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
proteknikblg
Üye
Mesajlar: 35
Kayıt: 27 Nis 2006 08:39
Konum: Sivas
İletişim:

distinct yardım

Mesaj gönderen proteknikblg »

S.A. hayırlı geceler arkadaşlar

hasta adında birtablom var tablomda hastalar ve bu hastaların kefillerinin isim adres bilgileri mevcut bu hastaların kayıtları evr_id ile dosya tablosunda tutuluyor benim istediğim hasta tablosunu açtığımda dbgridde aynı evr_id ye sahip hasta veya kefillerden 1 tanesinin ismi gelsin bunun için forumda araştırdım ve distinct veya group by ile yapabileceğim fikrine kapıldım ve aşağıdaki sql kodunu girdim ancak ne yaptıysam başaramadım dbgridde yine tablodaki tüm kayıtlar listeleniyor. Nerede yanlış yapıyorum yardımcı olursanız sevinirim. Saygılarımla

Kod: Tümünü seç

select distinct EVR_ID, BABA_ADI, CR_TR,ADI, ADR, BOLGE, BRC,  ID, IL, ILCE, SYD, TC, CNS from hasta 
delphi 2007
firebird 2.0
evr_id : integer
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: distinct yardım

Mesaj gönderen conari »

tüm evr_id ler mi listelenecek sadece bir tanemi, anlayamadım sabah sabah kafa iyi basmadı.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: distinct yardım

Mesaj gönderen sabanakman »

Sorgularda, distinct ile yanına yazdığın tüm alanlar dikkate alınır. Yani o alanların hepsi aynı ise içinden birisi (ilk olanı) gelir. Group by'da ise alana göre gruplama yapıldığından bir grup EVR_ID içinden hangisinin bilgisi gelecek belirsizliği vardır. Kayıtlarda hepsi aynı olsa bile EVR_ID'ye göre gruplanmış sorguda diğer alanları direk alamazsınız. Bunun için bir adet where şartı yeter. Burada asıl önemli olan o tabloda otomatik artan bir alan olmasıdır. Hiç bir kayıtta bu alan değeri diğer kayıtla aynı olmamalıdır. Buna ben SIRANO diyerek örnek sorguyu veriyorum.

Kod: Tümünü seç

select * from hasta where SIRANO in (select min(SIRANO) from hasta group by EVR_ID)
gibi bir kod işine yarayacaktır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
proteknikblg
Üye
Mesajlar: 35
Kayıt: 27 Nis 2006 08:39
Konum: Sivas
İletişim:

Re: distinct yardım

Mesaj gönderen proteknikblg »

Hayırlı akşamlar öncelikle gösterdiğiniz ilgiye teşekkür ederim.
Anladığım kadarı ile böyle bir sorguda distinct işime yaramıyor saban akman hocamın söylediğiği sql kodu ile sorunum çözüldü. Teşekkürler sabanakman hocam

Rica : Burada kullandığımız sql kodunda

Kod: Tümünü seç

SIRANO in (select min(SIRANO) from hasta group by EVR_ID)
bölümünün çalışma mantığını bir türlü kafamda canlandıramadım. kısaca açıklayabilirseniz sevinirim.
Ertugrul
Üye
Mesajlar: 136
Kayıt: 09 May 2009 12:05

Re: distinct yardım

Mesaj gönderen Ertugrul »

proteknikblg yazdı:Rica : Burada kullandığımız sql kodunda

Kod: Tümünü seç

SIRANO in (select min(SIRANO) from hasta group by EVR_ID)
bölümünün çalışma mantığını bir türlü kafamda canlandıramadım. kısaca açıklayabilirseniz sevinirim.
Ona Subquery deniyor. Subqueryler asil queryden once calisir. Yukaridaki subquerynin calisma sekli ise, once asagidakini calistirmak.

Kod: Tümünü seç

select min(SIRANO) from hasta group by EVR_ID
Yukaridaki query'yi calistirin, bu her EVR_ID alanina ait en dusuk SIRANO verilerini getirecektir, ornegin 1001, 1051, 1060. Daha sonra asil query asagidaki gibi calisiyor.

Kod: Tümünü seç

WHERE SIRANO in (1001,1051,1060)
Kullanıcı avatarı
proteknikblg
Üye
Mesajlar: 35
Kayıt: 27 Nis 2006 08:39
Konum: Sivas
İletişim:

Re: distinct yardım

Mesaj gönderen proteknikblg »

Teşekkür ettim Ertugrul bey şimdi anladım ilginize teşekkür ederim.
Cevapla