iÇ İçe select de order by sorunu

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ı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

iÇ İçe select de order by sorunu

Mesaj gönderen musti »

S.A.

İç içe select yaparken sum icinde bir oder by veremıyoruz bundan dolayı toplam degisiyor.şoyleki.

Kod: Tümünü seç

SELECT
( SELECT  SUM(COALESCE(borc,0)-COALESCE(ALACAK,0)) FROM TABLO Ch2
WHERE CARI_KOD='M002' AND  Ch2.kayit_sirasi <= Ch.kayit_sirasi    ) AS BAKIYE
, BORC,alacak FROM TABLO Ch

where CARI_KOD='M002'

ORDER BY TARIH,KAYIT_SIRASI
bu alanda bakıye borc dan alacagı cıkartarak alt alta toplayarak olusuyor.
Bu ıslemi once tarih sonra kayıt sırasına gore yapmalı ama burda bunu yapamadım.

ıstedıgım Şu
K.sırası ** Tarih** borc**alacak----bakiye

1*** 10.01.2007 *** 15.00 0.00 ----- 15.00
2*** 10.01.2007 *** 0.00 10.00 ---- 5.00
3*** 11.01.2007 *** 15.00 0.000 --- 20.00
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: iÇ İçe select de order by sorunu

Mesaj gönderen rsimsek »

musti yazdı:...
ORDER BY TARIH,KAYIT_SIRASI
yerine, alanların önüne ALIAS ları ekleyip denedin mi?

Kod: Tümünü seç

...
ORDER BY ch.TARIH, ch.KAYIT_SIRASI
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: iÇ İçe select de order by sorunu

Mesaj gönderen musti »

Denedim abi.
Ama o order da zaten sorun yok o yapiyor calisiyor. sorun Iceride olan select de order olmuyor.
yani SELECT SUM(COALESCE(borc,0)-COALESCE(ALACAK,0)) FROM TABLO Ch2
WHERE CARI_KOD='M002' AND Ch2.kayit_sirasi <= Ch.kayit_sirasi order byi burada veremiyoruz. buraya versek sorun cozulecek. ) as BAKIYE
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: iÇ İçe select de order by sorunu

Mesaj gönderen Hakan Can »

SELECT FIRST 10000000 SUM ... ORDER BY ... şeklinde deneyebilir misin?
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: iÇ İçe select de order by sorunu

Mesaj gönderen musti »

Hakan Can yazdı:SELECT FIRST 10000000 SUM ... ORDER BY ... şeklinde deneyebilir misin?
Bunu ne için yapayım. sorunum select için de kullanılan select ile normal select de aynı order by ı kullanmak.

içeride olan selectin içine order byı da eklersem hata alıyorum

hata su
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the ORDER BY clause (not contained in either an aggregate function or the GROUP BY clause).
)
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: iÇ İçe select de order by sorunu

Mesaj gönderen unicorn64 »

Kod: Tümünü seç

SELECT  SUM(COALESCE(borc,0)-COALESCE(ALACAK,0)) FROM TABLO Ch2
WHERE CARI_KOD='M002' AND  Ch2.kayit_sirasi <= Ch.kayit_sirasi

bu select de sıralanacak bir değerler listesi yokki. bu select sonucundan tek değer çıkar...

Ch2 aliaslı "TABLO" tablosundaki where kısıtına uyan kayıtların (borç-alacak) farklarını toplar ve tek değer çıkar.
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: iÇ İçe select de order by sorunu

Mesaj gönderen Hakan Can »

Görmek istediğin sonuca bakarak şöyle bir query işini görür galiba:

Kod: Tümünü seç

SELECT
  T1.KAYIT_SIRASI,
  T1.TARIH,
  COALESCE(SUM(T1.BORC),   0) AS BORC,
  COALESCE(SUM(T1.ALACAK), 0) AS ALACAK,
  COALESCE(SUM(T2.BORC),   0) - COALESCE(SUM(T2.ALACAK), 0) AS BAKIYE
FROM TABLO T1
  LEFT JOIN TABLO T2 ON T2.CARI_KOD = T1.CARI_KOD AND T2.KAYIT_SIRASI <= T1.KAYIT_SIRASI
WHERE T1.CARI_KOD = 'M002'
GROUP BY T1.KAYIT_SIRASI, T1.TARIH
ORDER BY T1.KAYIT_SIRASI, T1.TARIH
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: iÇ İçe select de order by sorunu

Mesaj gönderen musti »

Ilgin için sagol ama boyle olmuyor.toplamlar dahil hersey yanlıs geliyor.

görmek istedigim tarih ve kayıt sırasına gore olan bir tablodan borc alacak bilgileri ve bunların satır satır bakiyelerini usten asağı çıkartarak almak.

Benim yaptığım ornekde doğru bir şekilde alıyorum. Tek sorunum aynı tarihde briden fazla kayıt olması bakiye tuturlarının değitirir. genel select le içerideki select aynı order da olması.

teşekkür ederim.
Cevapla