sql
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
sql
merhaba ustalar
soyle bir sorunum var
giris ve cikis adinda iki tablom var
giris teki miktari toplayacak cikistaki miktari toplayacak ve birbirinden cıkararak kalanı bulacacak fakat bunu parcaadina gore yapacak ve istenilen tarih aralıgında yapabilecek urunadina gore gruplayacak takildigim yer giristeki a parcasini toplayacak ve cikistaki a parcasini toplayip birbirinden cikaracak fakat ayni parca oldugunu nerden bilecek giris.urunadi=cikisurunadi seklinde birsey yazdim hata veriyor belkide yerini yanlis yaptim tarihtete ayni sekilde hata veriyor
select(' select urunadi,urunkodu (select sum(miktari) from giris)-(select(sum(miktari) from cikis) from giris,cikis where tarih between ''' +edit1.text+ ''' and ''' + edit2.text+ '''' group by giris.urunadi');
nerde hata yapiyorum.
tskler.
soyle bir sorunum var
giris ve cikis adinda iki tablom var
giris teki miktari toplayacak cikistaki miktari toplayacak ve birbirinden cıkararak kalanı bulacacak fakat bunu parcaadina gore yapacak ve istenilen tarih aralıgında yapabilecek urunadina gore gruplayacak takildigim yer giristeki a parcasini toplayacak ve cikistaki a parcasini toplayip birbirinden cikaracak fakat ayni parca oldugunu nerden bilecek giris.urunadi=cikisurunadi seklinde birsey yazdim hata veriyor belkide yerini yanlis yaptim tarihtete ayni sekilde hata veriyor
select(' select urunadi,urunkodu (select sum(miktari) from giris)-(select(sum(miktari) from cikis) from giris,cikis where tarih between ''' +edit1.text+ ''' and ''' + edit2.text+ '''' group by giris.urunadi');
nerde hata yapiyorum.
tskler.
Garibanus
Re: sql
Sql ile ilgili sorular vt ne ise onun bölümünde sorsan daha sağlıklı olur.
MSSQL, Oracle veya diğer vtler.
soruna gelince,
Bu eşitlemeye yapabilmeniz için iki tablodaki kodları eşitlemeniz lazım.
Birinci seçenek aşağıdaki gibi bir sorgu.
İkinci Join yapıları, forumda örnekleri çok.
Üçüncü, Union kullanarak
vt ne bilmiyorum ama yukarıda verdiğim örnek genelde tüm vtler de kullanılabilir.
MSSQL, Oracle veya diğer vtler.
soruna gelince,
Bu eşitlemeye yapabilmeniz için iki tablodaki kodları eşitlemeniz lazım.
Birinci seçenek aşağıdaki gibi bir sorgu.
Kod: Tümünü seç
select gtablo.urunadi, gtablo.urunkodu sum(gtablo.miktari) - sum(ctablo.miktari) from gtablo,ctablo where gtablo.urunkodu=ctablo.urunkodu and gtablo.tarih between ''' +edit1.text+ ''' and ''' + edit2.text+ '''' and ctablo.tarih between ''' +edit1.text+ ''' and ''' + edit2.text+ '''' group by gtablo.urunadi, gtablo.urunkodu;
Üçüncü, Union kullanarak
vt ne bilmiyorum ama yukarıda verdiğim örnek genelde tüm vtler de kullanılabilir.
Bir kelimenin anlamını öğretsen bile yeter..



Re: sql
tskler conari
d7 fb kullaniyorum
senin kodlarini su sekilde duzenledim istedigimi kismen yapiyor
IBQuery1.SQL.Add('select giris.urunadi, giris.urunkodu , sum(giris.miktariadeti) - sum(cikis.miktariadeti) from giris,cikis where giris.urunkodu=cikis.urunkodu and giris.tarih between ''' +edit1.text+ ''' and ''' + edit2.text+ ''' and cikis.tarih between ''' +edit1.text+ ''' and ''' + edit2.text+ ''' group by giris.urunadi,giris.urunkodu ');
1-giris tablosunda olan bir parcanin cikis tablosunda cikis yapilmamissa gostermeyecektir burada sanirim bunu nasil asacagiz yani cikisi hic yapilmamis o halde giris adeti-0=girisadeti olmali
2-ve yapmak istedigim su belirtilen tarihler arasinda girismiktari-cikismiktari ne kadar stogu oldugunu gormek burada kafami karistiran tarihi girise goremi cikisa goremi alacagim ki o tarihler arasindaki stogu bulayim.
3-yukaridaki sorgu sonucu soyle birsey cikiyor
giris_table
urunadi urunkodu miktari
a 1 10
b 2 123
a 1 2
cikis_table
urunadi urunkodu miktari
a 1 10
b 2 2
sonuc olarak
a 1 10
b 2 121
olmasi gerekiyor fakat
a 1 -8
b 2 121
seklinde gosteriyor
bu kodu da denedim yine ayni sonuc
ibquery1.sql.add('SELECT giris.urunadi sum(giris.miktariadeti)-sum(cikis.miktariadeti) from giris,cikis where giris.urunadi=cikis.urunadi and giris.tarih='''+edit1.Text+'''and cikis.tarih='''+edit1.Text+'''');
tskler.
d7 fb kullaniyorum
senin kodlarini su sekilde duzenledim istedigimi kismen yapiyor
IBQuery1.SQL.Add('select giris.urunadi, giris.urunkodu , sum(giris.miktariadeti) - sum(cikis.miktariadeti) from giris,cikis where giris.urunkodu=cikis.urunkodu and giris.tarih between ''' +edit1.text+ ''' and ''' + edit2.text+ ''' and cikis.tarih between ''' +edit1.text+ ''' and ''' + edit2.text+ ''' group by giris.urunadi,giris.urunkodu ');
1-giris tablosunda olan bir parcanin cikis tablosunda cikis yapilmamissa gostermeyecektir burada sanirim bunu nasil asacagiz yani cikisi hic yapilmamis o halde giris adeti-0=girisadeti olmali
2-ve yapmak istedigim su belirtilen tarihler arasinda girismiktari-cikismiktari ne kadar stogu oldugunu gormek burada kafami karistiran tarihi girise goremi cikisa goremi alacagim ki o tarihler arasindaki stogu bulayim.
3-yukaridaki sorgu sonucu soyle birsey cikiyor
giris_table
urunadi urunkodu miktari
a 1 10
b 2 123
a 1 2
cikis_table
urunadi urunkodu miktari
a 1 10
b 2 2
sonuc olarak
a 1 10
b 2 121
olmasi gerekiyor fakat
a 1 -8
b 2 121
seklinde gosteriyor
bu kodu da denedim yine ayni sonuc
ibquery1.sql.add('SELECT giris.urunadi sum(giris.miktariadeti)-sum(cikis.miktariadeti) from giris,cikis where giris.urunadi=cikis.urunadi and giris.tarih='''+edit1.Text+'''and cikis.tarih='''+edit1.Text+'''');
tskler.
Garibanus
Re: sql
Fb için tam bir şey diyemeyeceğim ama, çıkış tablondaki isim ve kod alanlarınıda group by a eklemen gerekebilir.
Onun dışında INNER, LEFT, RIGHT join sorgulamalarına bak. Öğrenmen hazır kodu kullanmandan daha faydalı olacaktır.
Diğer bir alternatif. bir view hazırla ve iki tabloyu tamamı ile birleştir. Farklı bir field olarak, G,C stringini ekle.
Sorgunu burdan şekersin.
Onun dışında INNER, LEFT, RIGHT join sorgulamalarına bak. Öğrenmen hazır kodu kullanmandan daha faydalı olacaktır.
Diğer bir alternatif. bir view hazırla ve iki tabloyu tamamı ile birleştir. Farklı bir field olarak, G,C stringini ekle.
Sorgunu burdan şekersin.

En son conari tarafından 18 Nis 2008 03:49 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Bir kelimenin anlamını öğretsen bile yeter..



Re: sql
ustalar bi el atsaniz hesaplamayi neden yanlis yapiyor cozemedim her yoluı denedim bi sonuca varamadim
yukaridaki kod bir urun icin istedigimi yapiyor ama digeri icin hatali sonuc uretiyor
ayri ayri sorgu yaptim dogru hesapliyor fakat birlestirince yanlis sonuc veriyor.
hata nerde acaba?
tskler.
yukaridaki kod bir urun icin istedigimi yapiyor ama digeri icin hatali sonuc uretiyor
ayri ayri sorgu yaptim dogru hesapliyor fakat birlestirince yanlis sonuc veriyor.
hata nerde acaba?
tskler.
Garibanus
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: sql
Bunun için stored procedure yazman en sağlıklı çözüm olur. İşlemleri parça parça tamamlayarak tek row halinde sonuç alabilirsin.
Not : Konuyu @conari'nin değindiği gibi veritabanı forumuna açsan ve başlığına da daha açıklayıcı bir ifade yazsan daha yerinde olurdu.
Kolay gele.
Not : Konuyu @conari'nin değindiği gibi veritabanı forumuna açsan ve başlığına da daha açıklayıcı bir ifade yazsan daha yerinde olurdu.
Kolay gele.
Re: sql
giriş tablosuyla çıkış tablosunun yapısı(alanları) aynı mı?
eğer öyleyse neden iki ayrı tablo olsun ki, gc_kod die bi nvarchar(1) işini görür.
sonrada
örneğin bakiyeyi almak için
denebilir...
eğer öyleyse neden iki ayrı tablo olsun ki, gc_kod die bi nvarchar(1) işini görür.
sonrada
örneğin bakiyeyi almak için
Kod: Tümünü seç
select urunkodu,sum ((case when gc_kod='G' then miktari else 0 end)-(case when gc_kod='C' then miktari else 0 end)) as bakiye from giriscikis group by urunkodu
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...

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...

Re: sql
evet alanlar ayni arkadaslar fakat 2 ayri table(giris,cikis) olsa hem table lar sismez hemde ileride eger bir donusum icin daha avantajlı olabilir diye dusundum(sp,trigger) diger bir yontem evet ama sql ile neden olmuyor hayret aslinda oluyor ama kismen hesaplamayi yanlis veriyor.veya soyle yapsam tablolari ayri querylerle(veya ayni query ile )hesaplatip degiskenlere atsam sonra birbirinden cikarsam nasil olur ama bu seferde tum urunleri nasil gostericem(sanirim dizilerle ugrasmam gerek).
unicorn64 eger tek tabloda yapsam verdigin kodu biraz daha acabilirmisin case ve else kullanmissin ('G') vs?
tskler.
unicorn64 eger tek tabloda yapsam verdigin kodu biraz daha acabilirmisin case ve else kullanmissin ('G') vs?
tskler.
Garibanus
Re: sql
case şarta göre sorgu oluşturmaya yarıyor.
tabloda gc_kod diye bir alan olsun ve giriş haraketi için 'G' çıkış hareketi için 'C' yazalım bu alana.
(case when gc_kod='G' then miktari else 0 end) -> gc_kod 'G' ise miktarı al değilse 0 al
(case when gc_kod='C' then miktari else 0 end) -> gc_kod 'C' ise miktarı al değilse 0 al
sum içinde toplanacak değer her bir kayıt için girişse pozitif çıkışsa negatif olmuş olur. daha sonra bunların toplamı da bakiyeyi verir...
tabloda gc_kod diye bir alan olsun ve giriş haraketi için 'G' çıkış hareketi için 'C' yazalım bu alana.
(case when gc_kod='G' then miktari else 0 end) -> gc_kod 'G' ise miktarı al değilse 0 al
(case when gc_kod='C' then miktari else 0 end) -> gc_kod 'C' ise miktarı al değilse 0 al
sum içinde toplanacak değer her bir kayıt için girişse pozitif çıkışsa negatif olmuş olur. daha sonra bunların toplamı da bakiyeyi verir...
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...

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...

Re: sql
evet unicorn guzel ve degisik bir yontem tskler fakat var diger query yontemini kullanmak istiyorum(veya trigger) fakat bu sorgu neden yanlis sonuc verdi onu anlayamadim hadi bu sefer hallederiz ama yanlisin nerede oldugunu bulmak gerekiyor olmadi birak gibi biraz tuhaf geliyor bana ,
tekrar tskler.
tekrar tskler.
Garibanus
Re: sql
Stoklar için sabit bir tablon var ise , kodları ve isimleri burdan select et. giriş ve çıkışları diğer iki tablodan bu sayede gelmeyen kayıtlarında gelir.
Ayrıca Union dene demiştim işine yaraması lazımdı.
Ama iki tabloyu birleştirmen en sağlıklısıdır.
Ayrıca Union dene demiştim işine yaraması lazımdı.
Ama iki tabloyu birleştirmen en sağlıklısıdır.
Bir kelimenin anlamını öğretsen bile yeter..


