Forum
Merhaba arkadaşlar;
Select distinct (nStokID),skodu from tbstok where nStokID not in (select nstokID from tbStokMuhasebeEntegrasyon where nSubeMagazaHesapTipi in (13) ) and nstokID in (select nStokID from tbstokfisidetayi where sharekettipi='3')
Yukarıdaki sorgumda 3 adet tablo bulunmaktadır.Tbstok tablosunda nstokId tutuyorum.Tbstokfisidetayi tablosunda stok hareketlerini tutuyorum.Tbmuhasebentegrasyon tablosunda stokların muhasebe karşılıklarını tutuyorum.
Sorgunun amacı stokfisidetayi tablosunda olan ama stokmuhasebeentegrasyon tablosunda olmayan stokları göstermektedir.Yani entegre olmamış stokları listeler.
Yapmak istediğim işlem şudur.Bir stok işlem gördüğünde,o stoğun ID si ve nsubemagazahesaptipi=13 olacak şekilde tbmuhasebeentegrasyon tablosunda arama yapar.Yoksa listeler.Buna bir ek yapmak istiyorum.shareket tipi=3 de yoksa eğer listelesin.Yani 2 olan kriteri,3 kritere çıkarmak istiyorum.Sorgunun sonunda bununla ilgili bir cümle var.Yalnız bu işe yaramıyor.
Umarım anlatabil mişimdir ?
Yardımcı olabilir misiniz ?
Merhaba,
Select distinct (nStokID),skodu from tbstok where nStokID not in (select nstokID from tbStokMuhasebeEntegrasyon where nSubeMagazaHesapTipi=13) and nstokID in (select nStokID from tbstokfisidetayi where sharekettipi<>3)
Duplike kayıt gelmemesi gerek, ama gene duplike ile karşılaşırsanız group by kullanmayı deneyin.
Uğur Bey;
Çok farklı sonuçlar geldi.İstediğimiz bu değil.yalnız duplike kayıt ile ne demek istediniz anlamadım.
Distinct takısını sorgunuzda nstokid kolonunda kullandığınızda aynı nstokid ler birer kez listelenir, yani 3 tane 11 varsa sadece bunlardan birisi listelenir. Sizin kullandığınız ana SQL cümlesi üzerinden gittim açıkçası... Yandaki bilgi tam net değil ilk sorunuzda, stokfisdetayında stok hareket tipi 3 dışındaki kayıtlar için -> nstokID in (select nStokID from tbstokfisidetayi where sharekettipi<>3), stok hareket tipi 3 içinde olmayan kayıtlar şeklinde olacak ise -> nstokID not in (select nStokID from tbstokfisidetayi where sharekettipi=3)
Yani "x dışındakiler" ve "x içinde olmayanlar" cümlelerinin sonuçları aslında birbirine eşit değildir, hele hele subquery kullanıyorsanız.
Uğur Bey;
Hareket tipi 3 olmayan ile ilgili sorgu yazmışsınız. Ama biz bu şekilde dememiştik.İlk yazdığım konuyu okursanız anlayacaksınız,ne demek istediğimi.
Buna bir ek yapmak istiyorum.shareket tipi=3 de yoksa eğer listelesin.
Merhaba,
Yukardaki ilk sorunuzdan bir alıntı. Benim burdan anladığım "stok hareket tipi 3 olmayan kayıtlarda listelensin" birinci şarta ek olarak.
İyi günler,
Merhaba.
Anladığım kadarıyla tbstok, tbstokfisidetayi ve tbStokMuhasebeEntegrasyon adlı 3 tane tablonuz var ve tbstok tablosunda olan, tbstokfisidetayi tablosunda da olan ancak tbStokMuhasebeEntegrasyon tablosunda olmayan ve aynı zamanda tbStokMuhasebeEntegrasyon tablosundaki nSubeMagazaHesapTipi sütunu karşılığı 13 olan ve tbstokfisidetayi tablosundaki sharekettipi sütunu değeri 3 olan kayıtları listelemek istiyorsunuz.
Bu kayıtları;
SELECT tbstok.nStokID, tbstok.skodu FROM tbstok INNER JOIN tbstokfisidetayi ON tbstok.nStokID = tbstokfisidetayi.nstokID LEFT OUTER JOIN tbStokMuhasebeEntegrasyon ON tbstok.nStokID = tbStokMuhasebeEntegrasyon.nstokID WHERE (tbStokMuhasebeEntegrasyon.nstokID IS NULL) AND (tbStokMuhasebeEntegrasyon.nSubeMagazaHesapTipi = 13) AND (tbstokfisidetayi.sharekettipi = '3')
sorgusu listeler. Bu sorguyu deneyin; eğer sorununuzu çözmezse tekrar konuyu irdeleyelim.
İyi çalışmalar.
Mert Bey;
Sorgularınız çalıştı ama istediğim liste bu değil.
Örnek üzerinden anlatayım.İhracat yapıyorum.Stok kodum 0128 olsun.İhracat için hareket tipim ise 3.Bu bilgi şu anda tbstokfisidetayitablosunda ama entegre olmamış.Aşağıdaki sorgu ile buna benzer diğer ürünleri bulup listeliyorum.
Select distinct (nStokID),skodu from tbstok where nStokID not in (select nstokID from tbStokMuhasebeEntegrasyon where nSubeMagazaHesapTipi in (13) ) and nstokID in (select nStokID from tbstokfisidetayi where sharekettipi='3')
nSubemağazahesaptipi=13 (13 Satış hesabıdır)
Yukarıdaki örnekte hiçbir sorun yoktur.0128 listede entegre olmamış stok olarak çıkmaktadır.
Fakat aynı ürünü laleli mağazam satış yaptı.Hareket tipi ise 1.Entegre yapılmamıştı.Entegresi yapıldı.tbstokmuhasebeentegrasyon tablosunda değerler şu şekilde
stok kodu nsubemağazahesaptipi hareket tipi
0128 13 1
Şimdi de aynı ürün ihracat yapıldı.Entegre olmamış stokların listesi çıkartıcam.Yukarıdaki sorguyu çalıştırıyorum.Liste vermiyor.Çünkü stok muhasebe entegrasyon tablosunda 0128 kodun 13 hesap tipi var.Ben ihracat yaptığım için hareket tipim 3.
Dolayısı ile aynı sorguya ek bir kriter eklemem gerekiyor.hareket tipi 3,yoksa eğer listele.
Umarım anlatabilmişimdir...
Anladığım kadarıyla tbstok, tbstokfisidetayi ve tbStokMuhasebeEntegrasyon adlı 3 tane tablonuz var ve tbstok tablosunda olan, tbstokfisidetayi tablosunda da olan ancak tbStokMuhasebeEntegrasyon tablosunda olmayan ve aynı zamanda tbStokMuhasebeEntegrasyon tablosundaki nSubeMagazaHesapTipi sütunu karşılığı 13 olan ve tbstokfisidetayi tablosundaki sharekettipi sütunu değeri 3 olan kayıtları listelemek istiyorsunuz.
Bu cümlede hatalı olan kısmı değiştirerek aynı cümle yapısında bir yazar mısınız
Mert Bey;
Ben anlatmaktan vazgeçtim.İlgilendiğiniz için teşekkür ederim.
Arkadaşlar;
SELECT tbstok.nStokID, tbstok.skodu FROM tbstokfisidetayi AS tbstokfisidetayi_1 INNER JOIN tbStokMuhasebeEntegrasyon ON tbstokfisidetayi_1.nstokID <> tbStokMuhasebeEntegrasyon.nstokID INNER JOIN tbStokMuhasebeEntegrasyon AS tbStokMuhasebeEntegrasyon_1 ON tbstokfisidetayi_1.nstokID <> tbStokMuhasebeEntegrasyon_1.nstokID RIGHT OUTER JOIN tbstok INNER JOIN tbstokfisidetayi ON tbstok.nStokID = tbstokfisidetayi.nstokID ON tbStokMuhasebeEntegrasyon.nstokID = tbstok.nStokID WHERE (tbStokMuhasebeEntegrasyon.nstokID IS NULL) AND (tbstokfisidetayi.sharekettipi = 3) AND (tbStokMuhasebeEntegrasyon.nSubeMagazaHesapTipi = 13) AND (tbstokfisidetayi_1.sharekettipi <> 3) AND (tbStokMuhasebeEntegrasyon_1.nSubeMagazaHesapTipi <> 13)
Bu kodu çalıştırınca ne oluyor?
Hata vermiyor ama sonuçta vermiyor...
SELECT tbstok.nStokID, tbstok.skodu FROM tbstokfisidetayi AS tbstokfisidetayi_1 INNER JOIN tbStokMuhasebeEntegrasyon ON tbstokfisidetayi_1.nstokID <> tbStokMuhasebeEntegrasyon.nstokID INNER JOIN tbStokMuhasebeEntegrasyon AS tbStokMuhasebeEntegrasyon_1 ON tbstokfisidetayi_1.nstokID <> tbStokMuhasebeEntegrasyon_1.nstokID RIGHT OUTER JOIN tbstok INNER JOIN tbstokfisidetayi ON tbstok.nStokID = tbstokfisidetayi.nstokID ON tbStokMuhasebeEntegrasyon.nstokID = tbstok.nStokID WHERE (tbStokMuhasebeEntegrasyon.nstokID IS NULL) AND (tbstokfisidetayi.sharekettipi = 3) AND (tbStokMuhasebeEntegrasyon.nSubeMagazaHesapTipi = 13) AND (tbstokfisidetayi_1.sharekettipi <> 3) AND (tbStokMuhasebeEntegrasyon_1.nSubeMagazaHesapTipi <> 13)
Olmadı...
Olmadı...
bu veritabanları farklı sql server'lar üzerinde mi?
Mert Bey;
Aynı veritabanında.Sorunumu zaten çözdüm.Konuyu kapatabiliriz.İlgilendiğiniz için saolun...