distinct yardım

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

distinct yardım

Mesaj gönderen proteknikblg » 13 May 2009 11:52

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 02:10
Konum: İstanbul & Gebze Karışık

Re: distinct yardım

Mesaj gönderen conari » 14 May 2009 07:54

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: 3046
Kayıt: 17 Nis 2006 07:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: distinct yardım

Mesaj gönderen sabanakman » 14 May 2009 09:09

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: 34
Kayıt: 27 Nis 2006 07:39
Konum: Sivas
İletişim:

Re: distinct yardım

Mesaj gönderen proteknikblg » 15 May 2009 08:15

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 11:05

Re: distinct yardım

Mesaj gönderen Ertugrul » 16 May 2009 08:38

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: 34
Kayıt: 27 Nis 2006 07:39
Konum: Sivas
İletişim:

Re: distinct yardım

Mesaj gönderen proteknikblg » 17 May 2009 10:22

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

Cevapla