FibDataset SUM ve TOP

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
adnansirca
Üye
Mesajlar: 135
Kayıt: 14 Kas 2005 12:24

FibDataset SUM ve TOP

Mesaj gönderen adnansirca »

Kod: Tümünü seç

SELECT DISTINCT 
          ID,
          YIL,
          SEHIR,
          TARIH,
          TUR,
          AD,
          SOYAD,
          ((SELECT SUM(ODEMELER.TUTAR) ODEME FROM ODEMELER WHERE ODEMELER.VERI_ID = ID)) 

      FROM
          VERI 
     

        LEFT OUTER JOIN ODEMELER ON (VERI.ID = ODEMELER.VERI_ID)
Fibdataset kullanıyorum.
Yukarıdaki kodlarda, ana tabloya ödeme toplamını çekmeye çalışıyorum. Ancak doğru sonucu alamıyorum. Sizce nasıl düzenlemek gerekir. Join kullanmak hata mıdır?

Bir de yukarıdaki sql cümlesine TOP 10 ifadesini eklediğimde "token unknown" hatası alıyorum.
Görüşlerinizi paylaşmanızı rica ederim.
İyi çalışmalar.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: FibDataset SUM ve TOP

Mesaj gönderen aslangeri »

s.a.
join işlemine gerek yok gibi görünüyor.
joini kaldırdığın zaman distince de gerek kalmayacak.
top 10 mssql de firebirdde first 10 demen lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
adnansirca
Üye
Mesajlar: 135
Kayıt: 14 Kas 2005 12:24

Re: FibDataset SUM ve TOP

Mesaj gönderen adnansirca »

aslangeri yazdı:s.a.
top 10 mssql de firebirdde first 10 demen lazım.
Haklısın ustad. Bu dikkatimden kaçmış.
Join i kullanmam gerekiyordu. Bu yüzden ben de procedure ile halletim. Veritabanını yormaz inşallah.
Birilerinin işine yarar diye kodu aşağıya yazıyorum.

SP

Kod: Tümünü seç

SET TERM ^ ;

CREATE OR ALTER PROCEDURE ODEME 
returns (
    veri_id integer,
    odenen double precision)
as
BEGIN
    FOR
        SELECT ID
        FROM VERI
        INTO :VERI_ID
    DO
    BEGIN
        ODENEN = 0;

        SELECT SUM(TUTAR) FROM odemeler WHERE VERI_ID = :VERI_ID
        INTO :ODENEN;


        IF (ODENEN IS NULL) THEN
          ODENEN = 0;

        SUSPEND;
    END
END^

SelectSQL

Kod: Tümünü seç

SELECT DISTINCT
          ID,
          YIL,
          SEHIR,
          TARIH,
          TUR,
          AD,
          SOYAD,
        ODEME.ODENEN

      FROM
          VERI  LEFT OUTER JOIN ODEME ON (VERI.ID = ODEME.VERI_ID)
İyi çalışmalar.
Cevapla