eşleşmelerde birden fazla kayıtı tek kayıta nasıl düşürüm

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ı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

eşleşmelerde birden fazla kayıtı tek kayıta nasıl düşürüm

Mesaj gönderen serbek_tr »

Hayırlı Çalışmalar dilerim arkadaşlar.
SubQuery ile ilgili konulara baktım ancak aşağıda verdiğim kodda nasıl uygulayacağımı bilmiyorum açıkçası yardım ederseniz sevinirim.

Kod: Tümünü seç

SELECT 
  SUM(GELIRPROJE_HD.GPHD_ODENEN) AS ODENEN,
  SUM(GELIRPROJE_HD.GPHD_ODENECEK) AS ODENECEK,
  DAIRENO.DAIREKODU,
  GELIRPROJE.GP_KODU,
  GELIRPROJE_HD.GCF,
  GELIRLER.GELIR_ADI,
  DAIRENO.ID,
  GELIRPROJE_HD.GPHD_BORCLU,
  UYELER.ADI,
  UYELER.SOYADI,
  UYELER.ID
FROM
  GELIRPROJE_HD
  LEFT OUTER JOIN GELIRLER ON (GELIRPROJE_HD.GPHD_GELIRID = GELIRLER.GELIR_ID)
  LEFT OUTER JOIN GELIRPROJE ON (GELIRPROJE_HD.GPHD_PROJEID = GELIRPROJE.GP_ID)
  LEFT OUTER JOIN DAIRENO ON (GELIRPROJE_HD.GPHD_DAIRENO = DAIRENO.ID)
  LEFT OUTER JOIN UYELER ON (GELIRPROJE_HD.GPHD_DAIRENO = UYELER.DAIRENO) {problem bu satır}
GROUP BY
  DAIRENO.DAIREKODU,
  GELIRPROJE.GP_KODU,
  GELIRPROJE_HD.GCF,
  GELIRLER.GELIR_ADI,
  DAIRENO.ID,
  GELIRPROJE_HD.GPHD_BORCLU,
  UYELER.ADI,
  UYELER.SOYADI,
  UYELER.ID
yukarıda ki kodda problem bu satır dediğim yerde aslında
GELIRPROJE_HD.GPHD_DAIRENO ile uyuşan birden fazla UYELER.DAIRENO var ancak bu uyuşan üyeler.daireno ların kayıt id leri farklı ben bu sorguyu nasıl yapmalıyımki bana bu üyeler.daireno lardan sadece id si en büyük olanı versin

ayrıca şunuda denedim

Kod: Tümünü seç

SELECT 
  SUM(GELIRPROJE_HD.GPHD_ODENEN) AS ODENEN,
  SUM(GELIRPROJE_HD.GPHD_ODENECEK) AS ODENECEK,
  DAIRENO.DAIREKODU,
  GELIRPROJE.GP_KODU,
  GELIRPROJE_HD.GCF,
  GELIRLER.GELIR_ADI,
 DAIRENO.ID,
  GELIRPROJE_HD.GPHD_BORCLU
FROM
  GELIRPROJE_HD
  LEFT OUTER JOIN GELIRLER ON (GELIRPROJE_HD.GPHD_GELIRID = GELIRLER.GELIR_ID)
  LEFT OUTER JOIN GELIRPROJE ON (GELIRPROJE_HD.GPHD_PROJEID = GELIRPROJE.GP_ID)
  LEFT OUTER JOIN DAIRENO ON (GELIRPROJE_HD.GPHD_DAIRENO = DAIRENO.ID)
GROUP BY
  DAIRENO.DAIREKODU,
  GELIRPROJE.GP_KODU,
  GELIRPROJE_HD.GCF,
  GELIRLER.GELIR_ADI,
 DAIRENO.ID,
  GELIRPROJE_HD.GPHD_BORCLU
kodu yukarıdaki gibi yazıp istediğim GELIRPROJE_HD.GPHD_DAIRENO = DAIRENO.ID) satırındaki sonucu lookup olarak almayı denedim bu defa bana tek kayıt veriyor ama istediğim kaydı vermiyor. ilk yada ikinci kod fark etmez istediğim tek kaydı nasıl alacağım yardımcı olursanız sevinirim. Şimdiden teşekkür ederim emeği geçenlere
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bir tabloda gruba göre en büyük alanı bulmanın bir kaç yolunu yazıyorum, oradan kendi sorguna entegre edersin artık :) . Örneğime göre Ad alanı aynı olan ama en büyük id değerlerini listelemeyi sağlayan 3 çeşit sogum var. Bu değişik şekillerde daha da artabilir.

select * from tbl as ana where id = (select max(id) from tbl as alt where alt.Ad=ana.Ad)
order by 1

select alt.id,ana.Ad from tbl as ana
left join tbl as alt on ana.Ad=alt.Ad
group by ana.Ad,alt.id
having max(ana.id)=alt.id
order by 1


select max(ana.id),ana.Ad from tbl as ana
left join tbl as alt on ana.Ad=alt.Ad
group by ana.Ad
order by 1
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Teşekkür ederim. Sağolun
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Cevapla