kısa bir soru..? SQL

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
meren
Üye
Mesajlar: 71
Kayıt: 20 Ara 2004 03:44

kısa bir soru..? SQL

Mesaj gönderen meren »

SELECT HesapKodu,Unvan1,Sum((DvrB+DigerB+OdemeB+CiroB+IadeFatB+KDVB+OtvBorc)-(DvrA+DigerA+OdemeA+CiroA+IadeFatA+KDVA+OtvAlacak)) As R_Bakiye FROM FINSAT330.CHK where HesapKodu>='ANK1.00' and HesapKodu<='XÇİM.942' GROUP BY HesapKodu, Unvan1

bu SQL cümlesinde bana 0 olmayan değerleri vermesini nasıl sağlarım.. yani sonucu sıfır olan bakiyeleri listelemesini istemiyorum..
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Re: kısa bir soru..? SQL

Mesaj gönderen gkimirti »

galiba
SELECT HesapKodu,Unvan1,Sum((DvrB+DigerB+OdemeB+CiroB+IadeFatB+KDVB+OtvBorc)-(DvrA+DigerA+OdemeA+CiroA+IadeFatA+KDVA+OtvAlacak)) As R_Bakiye FROM FINSAT330.CHK where HesapKodu>='ANK1.00' and HesapKodu<='XÇİM.942' GROUP BY HesapKodu, Unvan1
having Sum((DvrB+DigerB+OdemeB+CiroB+IadeFatB+KDVB+OtvBorc)-(DvrA+DigerA+OdemeA+CiroA+IadeFatA+KDVA+OtvAlacak))<>0
olmalı
ÜŞENME,ERTELEME,VAZGEÇME
meren
Üye
Mesajlar: 71
Kayıt: 20 Ara 2004 03:44

Mesaj gönderen meren »

evet çalı$tı te$ekkür ederim...

peki ben bu i$lemi aynı $ekilde.. 2. bir table'ım var 2 sinin toplam bakiyesini yani 1. table sum i$lemi sonucundaki BAKİYE ile 2. şirket(table) sum i$leminin sonucundaki BAKİYE arasındaki farkı.. bir SQL cümlesinde nasıl yapabiliriz..?

2. Table FINSAT373.CHK oluyor..
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Select Sum(T1.TUTAR1)-Sum(T2.TUTAR2)
From TABLO1 T1 , TABLO2 T2
Where .........
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

Hocam ben bu tür bir sql ile denedim fakat söyle bir sorun ile karsilastim...

Tablo 1 de iki adet kayit var.
Tablo 2 de bir adet kayit var.

söyle bir sql cümlesi kullandim...

Kod: Tümünü seç

select sum(Tablo1.hesap) as Giren, sum(Tablo2.Hesap) as Cikan, sum(Tablo1.Hesap)-sum(Tablo2.Hesap) as Kalan from Tablo1, Tablo2
Tablo 1 deki kayitlarda iki adet girdi görülüyor.. 125,88 ve 114,58
Tablo 2 deki kayit 1 adet ve söyle görülüyor. 52,74

Giren = 240,46
Cikan = 105,48
Kalan = 134,97

bu sekilde görülüyor... hesap yanlis... cikamadim isin icinden...

yardimci olabilirseniz sevinirim...

simdiden tesekkür ediyorum... selam ve dua ile...
kıdemsiz üye
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Kodunuzda birşey görükmüyor,
Burada Girenin ve Kalan ın doğru sonuc verdiği görülüyor .
Sorun sizinde gördüğünüz gibi Cikan da .
Tablo2de sadece tek bir kayıt olduğuna emin misiniz?
Yani where ile herhangi bir kısıtlama da koymamışsınız. Dolayısı ile select ten her iki tablonun bütün alanları geliyor.
Tablo1 den 2 kayıt olduğu kesin ama
Tablo1 :?: sanki birden fazla kayıt var gibi .
IbExpert gibi bir yönetim aracından o tabloda ki kayıtlara bir bakın
veya da şunu da bir deneyin bakalım ;

Kod: Tümünü seç

select * from Tablo2 
Kaç kayıt gelecek :idea:
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Oğuz'un dediği gibi Where ile ortak alanları eşleştirmezsen kayıtlar kartezyen çarpımı şeklinde gelir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

DISTINCT kelimesini kullanarak istediğiniz sonuca ulaşabilirsiniz:

Select Sum(DISTINCT T1.TUTAR1)-Sum(DISTINCT T2.TUTAR2)
From TABLO1 T1 , TABLO2 T2
Where .....

İyi çalışmalar.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

hocam ikinci tabloda yalnizca 1 adet kayit var. ama tablo 1 de 2 kayit oldugu icin iki defalik döngü oluyor sanki ve ikinci tablodaki tek kayidi ikiyle carpiyor :shock:

Hakan hocamin dedigi gibi yaptim DISTINCT komutunu kullandim... i ih olmuyor bu sefer hic calismiyor... sql hatasi oldugunu söylüyor... SQL in su an ki halini kopyaliyorum...
hesap_id her iki tablo da index olarak kullaniliyor...

Kod: Tümünü seç

select sum(tablo1.hesap) as giren, sum(tablo2.hesap) as cikan, sum(tablo1.hesap)-sum(tablo2.hesap) as kalan from tablo1, tablo2 where tablo1.hesap_id=1 and tablo2.hesap_id=1
kıdemsiz üye
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Başka bir kullanımı var mı bilemiyorum en azında yazım formatlarında o şekilde gösterilmiş. DISTINCT kelimesi SELECT DISTINCT ... FROM ... şeklinde kullanılır ve eşit olan / tekrarlayan satırlardan sadece birini görüntüler. :idea: Bahsettiğiniz olayda kartezyen çarpımından kurtulmak için ilişkili alanları birbirine eşitlemelisiniz :idea: Yani;

Kod: Tümünü seç

select sum(tablo1.hesap) as giren, sum(tablo2.hesap) as cikan, sum(tablo1.hesap)-sum(tablo2.hesap) as kalan 
from tablo1, tablo2 
where tablo1.hesap_id = tablo2.hesap_id
Burada esas tablo tablo1 dir. tablo2 join lenmiş oluyor. JOIN olayına bakmanızı tavsiye ederim :!:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

yok hocam ne yapiysam basarili olamadim... bunu bir sekilde cözmek zorundayim yoksa hic bir sey yapamiyorum... hersey bunun ucuna baglandi kaldi... ne denediysem olumlu sonuc alamadim... sql kitaplarini arastiriyorum, kartezyen olaylarini vesaire ama malesef yine olumlu bir sonuc alamadim... bu isi cözebilecegim farkli bir yöntem var mi?

simdi yapmak istedigim su...

ya bir query ile ayni anda her iki tablodaki field lari alip sergilemek ve ayni anda hem toplamlarini hemde toplamlari birbirlerinden cikartip kalan i görüntüleyebilmek.

yada iki query kullanip birincisi ile field lari alip ikincisi ile toplama ve cikartma islemlerini yaptirmak...

hocam cici bi sql cümlesi lazim... :oops:

Selam ve dua ile...
kıdemsiz üye
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Kullandığınız query nasıl join yaparsanız yapın DISTINCT kullanmadan istediğiniz sonucu vermeyecektir.
Eğer her iki tabloda join yaptığınız kritere uyan kayıt sayıları karşılıklı aynı olursa istediğiniz sonucu alırsınız.
Ama olmadığı zaman diyelim birinci tabloda bir kritere uyan 1 kayıt diğer tabloda 2 kayıt var.
DISTINCT kullanmazsanız birinci tablodaki kaydın iki katını döndürecektir. DISTINCT kullanırsanız birinci tablodan bir kaydı
ikinci tablodan iki kaydı döndürür.
Sonuç olarak Query'inizin şu şekilde olması gerekir:

Kod: Tümünü seç

select sum(DISTINCT tablo1.hesap) as giren, sum(DISTINCT tablo2.hesap) as cikan, sum(DISTINCT tablo1.hesap)-sum(DISTINCT tablo2.hesap) as kalan
from tablo1, tablo2
where tablo1.hesap_id = tablo2.hesap_id

DISTINCT kelimesini en basit olarak şu şekilde test edin:

SELECT SUM(DISTINCT TUTAR) FROM TABLO1

İyi çalışmalar.
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

hocam distinct kelimesini en basit olarak su sekilde test edin demissin.

Kod: Tümünü seç

SELECT SUM(DISTINCT TUTAR) FROM TABLO1
bu sekilde test ettim ama bende distinct kelimesi hic calismiyor :roll:

ZEOS adinda komponent kullaniyorum acaba komponent bu sekilde bir command i desteklemiyor olabilir mi? gerci böyle bir sey olmasi zor bir ihtimal cünkü sql standart dil... sql hatali diye bildiri aliyorum... sorun nerede olabilir?
kıdemsiz üye
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Mesaj gönderen ikra »

acaba bu kullanmis oldugum mysql server versionundan kaynaklaniyor olabilir mi? mysql 3.23 kullaniyorum. windows version'u.
kıdemsiz üye
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

FireBird ve MS-SQL'de çalışıyor.
Demekki MySQL desteklemiyor.

Stored Procedure kullanarak bu işlemi yapınız diyeceğim ama MySQL de Stored Procedure kullanılabiliyor mu bilmiyorum.

İyi çalışmalar.
Cevapla