Forum

Sql Sorgusu İsteği
 
Bildirimler
Hepsini Temizle

Sql Sorgusu İsteği

17 Yazılar
3 Üyeler
0 Reactions
569 Görüntüleme
(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

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 ? 


 


 

 
Gönderildi : 29/03/2011 21:05

(@ugurinal)
Gönderiler: 145
Estimable Member
 

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.

 
Gönderildi : 29/03/2011 21:54

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Uğur Bey;


Çok farklı sonuçlar geldi.İstediğimiz bu değil.yalnız duplike kayıt ile ne demek istediniz anlamadım.

 
Gönderildi : 30/03/2011 11:59

(@ugurinal)
Gönderiler: 145
Estimable Member
 

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.

 
Gönderildi : 30/03/2011 12:38

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

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.


 

 
Gönderildi : 30/03/2011 13:40

(@ugurinal)
Gönderiler: 145
Estimable Member
 


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,

 
Gönderildi : 30/03/2011 14:20

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

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.

 
Gönderildi : 30/03/2011 14:26

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

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


 

 
Gönderildi : 30/03/2011 15:07

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

 

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

 
Gönderildi : 30/03/2011 15:17

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Mert Bey;


Ben anlatmaktan vazgeçtim.İlgilendiğiniz için teşekkür ederim.

 
Gönderildi : 30/03/2011 15:43

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Arkadaşlar;

 

Ben sorunumu çözdüm.

 

SELECT distinct(tbstok.nStokID) FROM OPEN.dbo.tbstok tbstok, OPEN.dbo.tbstokfisidetayi tbstokfisidetayi, OPEN.dbo.tbstokmuhasebeentegrasyon tbstokmuhasebeentegrasyon  WHERE tbstok.nStokID = tbstokfisidetayi.nStokID AND tbstok.nStokID = tbstokmuhasebeentegrasyon.nStokID AND ((tbstokfisidetayi.sharekettipi='3' and not exists (select nhesapId from tbstokmuhasebeentegrasyon where  tbstokfisidetayi.nstokID=tbstokmuhasebeentegrasyon.nstokID and nsubemagazahesaptipi='13' and sharekettipi='3')))

 

yazınca oldu.Bilginiz olsun...

 
Gönderildi : 30/03/2011 17:38

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

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?

 
Gönderildi : 30/03/2011 19:52

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Hata vermiyor ama sonuçta vermiyor...

 
Gönderildi : 30/03/2011 20:00

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

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)

 
Gönderildi : 30/03/2011 20:01

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Olmadı...

 
Gönderildi : 30/03/2011 20:05

(@cozumpark)
Gönderiler: 16307
Illustrious Member Yönetici
 

Olmadı...


bu veritabanları farklı sql server'lar üzerinde mi?

 
Gönderildi : 30/03/2011 20:13

(@bluess_devils)
Gönderiler: 133
Estimable Member
Konu başlatıcı
 

Mert Bey;


Aynı veritabanında.Sorunumu zaten çözdüm.Konuyu kapatabiliriz.İlgilendiğiniz için saolun... 


 

 
Gönderildi : 30/03/2011 20:16

Paylaş: