SQL ile aynı anda 20 table den sum alma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
SQL ile aynı anda 20 table den sum alma
Selamun aleykum
sizce
bir alanınız vr 20 aden tablede ve bunların toplamını almak istiyorsunuz en iyi şekilde nasıl yaparsınız(JOINLERLE UZUN OLUYOR)
ORTAK field KODU OLSUN
TABLE LERDE TABLE1,TABLE2,TABLE3.............TABLE20 OLSUN
TOPLAN ALINIACAK FIELD DE BORC OLSUN
teşekkürler
sizce
bir alanınız vr 20 aden tablede ve bunların toplamını almak istiyorsunuz en iyi şekilde nasıl yaparsınız(JOINLERLE UZUN OLUYOR)
ORTAK field KODU OLSUN
TABLE LERDE TABLE1,TABLE2,TABLE3.............TABLE20 OLSUN
TOPLAN ALINIACAK FIELD DE BORC OLSUN
teşekkürler
a.s
En basiti şu şekilde..
20 table dediğin için ne yapsan kod yerine göre biraz uzun olacaktır...
En basiti şu şekilde..
Kod: Tümünü seç
Select sum(T1.BORC),Sum(T2.BORC),Sum(T3.BORC)..... ,Sum(T20.BORC) from TABLO1 T1,TABLO2 T2,TABLO3 T3.....TABLO20 T20
Kod: Tümünü seç
Select sum(T1.BORC+T2.BORC+T3.BORC+.....T20.BORC) as BUTUNTOPLAM from TABLO1 T1,TABLO2 T2,TABLO3 T3.....TABLO20 T20
Sayin Uğur1982,
eger form icine butun tablolari siralarsak bu bir kartezyen carpima neden olur.. 20 tabloda 2 ser kayıt bile olsa normalde 40 kaydın toplamını almamiz gerekirken kartezyen carpim sonucu olusan kayıtların sonucu 2*2*2*2*2.... 2 nin 20 kuvveti adedinde kayıt olusur... Eger kayıt sayıları da fazla ise trilyonlarca kaydı toplamaya calisir ki bunu da pratik olarak yapamaz....
aklıma gelen ilk yontem suFakat boyle bir soru veritabanı tasarımında bir problem var mı sorusunu da akla getiriyor..... Karşılaşılması gereken bir problem gibi durmuyor açıkcası.....
eger form icine butun tablolari siralarsak bu bir kartezyen carpima neden olur.. 20 tabloda 2 ser kayıt bile olsa normalde 40 kaydın toplamını almamiz gerekirken kartezyen carpim sonucu olusan kayıtların sonucu 2*2*2*2*2.... 2 nin 20 kuvveti adedinde kayıt olusur... Eger kayıt sayıları da fazla ise trilyonlarca kaydı toplamaya calisir ki bunu da pratik olarak yapamaz....
aklıma gelen ilk yontem su
Kod: Tümünü seç
Selec (Select sum(ALAN1) fron TABLO1)+
(Select sum(ALAN1) fron TABLO2)+
(Select sum(ALAN1) fron TABLO3)+
(Select sum(ALAN1) fron TABLO4)+
(Select sum(ALAN1) fron TABLO5)+
.....
* http://www.fahrettin.org Manzara Fotoğraflarım...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...
hocam saygılar
Selec (Select sum(ALAN1) fron TABLO1)+
(Select sum(ALAN1) fron TABLO2)+
(Select sum(ALAN1) fron TABLO3)+
(Select sum(ALAN1) fron TABLO4)+
(Select sum(ALAN1) fron TABLO5)
ibconsole dada queryde de denedim calismadi. umarim yanlıs anlamadım hepsi tek bir sql sorgusu degilmi yani ayri ayri degil.
Veri tabanım 12 ay lı bilgileri tutan 12 ayrı table dan olusan bir vt
Filedlarda
FISNO,TARIH,KODU, BORC,ALACAK,ACIKLAMA,NO SEKLINDE
her bir table da yaklasik 10.000 transaction var. ve sadece ilgili aylarda islem yapılıyorum yani su an 8 ay table nında.
rapor alınırkende genelde bulundugu ay veya bulundugu ay kadar olan butun aylardaki toplamlar isteniyor.
bende hepsini tek bir table degilde 12 ayri table da tuyayim dedim.
tskler
Selec (Select sum(ALAN1) fron TABLO1)+
(Select sum(ALAN1) fron TABLO2)+
(Select sum(ALAN1) fron TABLO3)+
(Select sum(ALAN1) fron TABLO4)+
(Select sum(ALAN1) fron TABLO5)
ibconsole dada queryde de denedim calismadi. umarim yanlıs anlamadım hepsi tek bir sql sorgusu degilmi yani ayri ayri degil.
Veri tabanım 12 ay lı bilgileri tutan 12 ayrı table dan olusan bir vt
Filedlarda
FISNO,TARIH,KODU, BORC,ALACAK,ACIKLAMA,NO SEKLINDE
her bir table da yaklasik 10.000 transaction var. ve sadece ilgili aylarda islem yapılıyorum yani su an 8 ay table nında.
rapor alınırkende genelde bulundugu ay veya bulundugu ay kadar olan butun aylardaki toplamlar isteniyor.
bende hepsini tek bir table degilde 12 ayri table da tuyayim dedim.
tskler
bu arada veritabanınız firebird galiba degil mi?
simdi burada yazdigim cümlenin ozu
gibi bir şey....
belki from olmadigi icin çalıştırmamış olabilir sybase den kalma alışkanlık bu tur kodlarda fromu unutsanızda hic sizi bozmadan meseleyi sineye çekip çalıştırıyor....
siz ona bir from ekleyin.... kesinlikle ve kesinlikle tek kayıtlı bir tablonuz varsa onu ekleyin yoksa da oracle ve sybsase de dummy diye bir tablo var bu işler için varsa onu kullanıın...
gibi.....
bu arada yapıyı tam anlamadım ama anladıgım kadarı ile ben olsaydım bunu 12 ayrı tablo yerine tek tablo yapıp bir ay kodu veya yıl+ay bilgisini eklerdim.... Bu tur konsolide raporlar cok daha kolaylaşırdı....
Neyse bu vakitten sonra yapı degisikligi hem zor olabilir hem de ben tam olarak dogru anlamamıs oldugum icin fazla da kafanızı karıstırmıs olmayayım.....
Ama sonuc olarak yukardaki kodda ısrar ederseniz çalışacaktır
simdi burada yazdigim cümlenin ozu
Kod: Tümünü seç
Select 10+30+40+90+......
belki from olmadigi icin çalıştırmamış olabilir sybase den kalma alışkanlık bu tur kodlarda fromu unutsanızda hic sizi bozmadan meseleyi sineye çekip çalıştırıyor....
siz ona bir from ekleyin.... kesinlikle ve kesinlikle tek kayıtlı bir tablonuz varsa onu ekleyin yoksa da oracle ve sybsase de dummy diye bir tablo var bu işler için varsa onu kullanıın...
Kod: Tümünü seç
Selec (Select sum(ALAN1) fron TABLO1)+
(Select sum(ALAN1) fron TABLO2)+
(Select sum(ALAN1) fron TABLO3)+
(Select sum(ALAN1) fron TABLO4)+
(Select sum(ALAN1) fron TABLO5)+
.....
from dummy
bu arada yapıyı tam anlamadım ama anladıgım kadarı ile ben olsaydım bunu 12 ayrı tablo yerine tek tablo yapıp bir ay kodu veya yıl+ay bilgisini eklerdim.... Bu tur konsolide raporlar cok daha kolaylaşırdı....
Neyse bu vakitten sonra yapı degisikligi hem zor olabilir hem de ben tam olarak dogru anlamamıs oldugum icin fazla da kafanızı karıstırmıs olmayayım.....
Ama sonuc olarak yukardaki kodda ısrar ederseniz çalışacaktır
* http://www.fahrettin.org Manzara Fotoğraflarım...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...
fron lar from diye degistirdim ama dummy anlamadım hocam
evet interbase vt
neden tek table da yapmadım hocam soyliyim her bir ayda 10.000 den 12 ayda 120.000 hareket ediyor bende 12 ayrı table adeyim dedim bir sorun olursa bir table de olsun diye ve daha hızlı osun diye sizce yanlismi ?
120.000 kayit icinden sorgulamaktansa 10.000 in icinde daha kolay olur dedim yoksa farketmezmi where ye aykodu da yazsak aynımı
yani
120.000 HAREKETLİ BİR TABLE DA
select sum (borc) from table
where AY='01'
ile 10.000 hareketli bir table da
select sum (borc) from table1
ayni seymi
bir de dbgrid lede bilgi girerken hız fark edermi ?
tskler
evet interbase vt
neden tek table da yapmadım hocam soyliyim her bir ayda 10.000 den 12 ayda 120.000 hareket ediyor bende 12 ayrı table adeyim dedim bir sorun olursa bir table de olsun diye ve daha hızlı osun diye sizce yanlismi ?
120.000 kayit icinden sorgulamaktansa 10.000 in icinde daha kolay olur dedim yoksa farketmezmi where ye aykodu da yazsak aynımı
yani
120.000 HAREKETLİ BİR TABLE DA
select sum (borc) from table
where AY='01'
ile 10.000 hareketli bir table da
select sum (borc) from table1
ayni seymi
bir de dbgrid lede bilgi girerken hız fark edermi ?
tskler
evet from yerine fron yazmisim...
Bilgi giris ve de her turlu gosterim ekraninda Query kullandiginiz surece de perforformans probleminiz olmaz....
seklinde olmasi lazim.... Fakat herhangi bir select'te olmaz ise bir subquery null donmesi toplam sonucun null olmasina nede nolur....
Ya da sybase de isnull e karsilik gelen firebird de bir fonksiyon vardi. Su an hatırlıyamıyorum o fonksiyonu kullanabilirsiniz....
Bu fonksiyon ile null olan degerler yerine hesaba sıfır katılacagi icin toplam null olmayacaktir.... Tabi siz isnull yerine ilgili firebird fonksiyonunu kullanmalisiniz. Belki hatirlayan bir arkadas soyleyebilir ya da siz help ten bulabilirsiniz....
Teorik olarak olmasa bile eger AY alanına gore bir indexiniz olursa ve bunun disinda diger indezlerinizin de en azindan gerekli olanlarının da en basina yine AY alanını eklerseniz pratik olarak aynı olur. Yani aradaki farki kolay kolay olcemezsiniz....musti yazdı:120.000 HAREKETLİ BİR TABLE DA
select sum (borc) from table
where AY='01'
ile 10.000 hareketli bir table da
select sum (borc) from table1
ayni seymi
Bilgi giris ve de her turlu gosterim ekraninda Query kullandiginiz surece de perforformans probleminiz olmaz....
Kod: Tümünü seç
Selec (Select sum(ALAN1) from TABLO1 where ALAN1 is not null)+
(Select sum(ALAN1) from TABLO2 where ALAN1 is not null)+
(Select sum(ALAN1) from TABLO3 where ALAN1 is not null)+
(Select sum(ALAN1) from TABLO4 where ALAN1 is not null)+
(Select sum(ALAN1) from TABLO5 where ALAN1 is not null)+
.....
Ya da sybase de isnull e karsilik gelen firebird de bir fonksiyon vardi. Su an hatırlıyamıyorum o fonksiyonu kullanabilirsiniz....
Kod: Tümünü seç
Selec (Select sum(isnull(ALAN1,0)) from TABLO1)+
(Select sum(isnull(ALAN1,0)) from TABLO2)+
(Select sum(isnull(ALAN1,0)) from TABLO3)+
(Select sum(isnull(ALAN1,0)) from TABLO4)+
(Select sum(isnull(ALAN1,0)) from TABLO5)+
.....
* http://www.fahrettin.org Manzara Fotoğraflarım...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...