Konuyu görüntüle
IUCODERS FORUM > Programlama > Veritabanları > sql stok sorgusu yardımı
Yazar
mervenur


avatar
İstanbul
Kayıt: 06.01.2011
26.04.2013-09:17 #78824
merhaba arkadaşlar,
TbStok ve TbStokIslemler diye 2 tablom var.
TbStok ta malzeme ile ilgili ilgiler TbStokIslemler de Giriş ve Çıkışlar var.
Giriş ve çıkışların her malzeme için tek satır gelecek şekilde liste vereceğiz.
Listede malzeme tipi, malzeme adı, giren, çıkan, kalan sütunları olacak.
Sorgusu için yardımcı olabilir misiniz?

TbStok sütunları ID_STOK, ID_TIP, STOK_KODU, STOK_ADI, AKTIF_ UYARI_MIKTARI, UYARI_GUN_SAYISI

TbStokIslemleri tablosunda KULLANILAN_ISLEM_ID, ACIKLAMA, MIKTAR, STOK_ID, ISLEM_ZAMANI, STOK_CIKIS, ISLEM_YAPAN_KULLANICI, KISI_ID (STOK_CIKIS sütunu bit değerdir, miktarı tek sütunda tuttuk, MIKTAR_GIRIS, MIKTAR_CIKIS diye ayırmadık)

TbStokTipleri tablosunda da STOK_TIP_ID, STOK_TIP_ADI

daha önce benzer bir sorgu yazan varsa yardımcı olabilir mi?







Sevgiyle

Yazar
mrflz


avatar
Luleburgaz
admin
Kayıt: 15.06.2006
26.04.2013-20:24 #78825
Tablo tasarımları cok da guzel olmamıs acıkcası.
Bazıları ID_STOK bazıları STOK_ID. Aralarında ilişki olan alanlar en azından aynı olabilirmiş.

Soyle birsey olabilir istediğin ama tablolar aralarında hangi alanlardan ilişkilendirilmiş bilmek gerekebilir. Ki zaten bu şekilde hangi alanları bağlayacagını kolaylıkla bulabilirsin.

select STOK_ADI, STOK_TIP_ADI, MIKTAR, STOK_CIKIS, MIKTAR-STOK_CIKIS
TbStok a, TbStokIslemleri b, TbStokTipleri c
where a.ID_TIP=c.STOK_TIP_ID
and a.ID_STOK=b.STOK_ID






I see the ghosts of navigators but they are lost





Yazar
mahmut716


avatar

Kayıt: 20.12.2006
26.04.2013-20:55 #78826
tam da sorguyu yazıyordum,cevap vermiş arkadaş
yine dediği gibi, üç tabloda da ortak bir ismin olması lazım,SatışId gibi mesela,satışid primary key ve unique olacak, birer birer artması gerekecek, farklı ve daha anlaşılır bir kod yazpısı istersen,inner join kullanabilirsin
http://www.w3schools.com/sql/sql_join_inner.asp





ios developer

Yazar
fealin


avatar

Kayıt: 30.01.2006
27.04.2013-22:40 #78827
mervenur yazdi
 
(STOK_CIKIS sütunu bit değerdir, miktarı tek sütunda tuttuk, MIKTAR_GIRIS, MIKTAR_CIKIS diye ayırmadık)

Öncelikle TbStok TbStokIslemler tablonu STOK_ID üzerinden joinlemen lazım aralarında ilişki oluşturmana gerek yok iki tabloda da id değerlerinin birbirini tutması lazım sadece. tahminimce TbStok taki ID_STOK ve TbStokIslemler tablosundaki STOK_ID ortak alanlar. bunun sonrasında birleştirdiğin sorguya SUM(MIKTAR) OVER(PARTITION BY ID_TIP,STOK_CIKIS) bu sorgu giriş ve çıkış miktarlarını farklı satırlarda verir.
Eğer bu miktarlarıda yan yana istiyorsan yukarıdaki sorguya Where STOK_CIKIS = 1 ve Where STOK_CIKIS= 0 şartını ekleyerek giriş ve çıkışlar için ayrı ayrı iki alt sorgu hazırlayıp bunları da ID_TIP (ürün tipi olarak düşünüyorum) üzerinden joinlersen Sorgu1.MIKTAR as 'CIKIS', Sorgu2.MIKTAR as 'GIRIS' olarak yan yana da gösterebilirsin.





there is no emotion; there is peace
there is no ignorance; there is knowledge
there is no passion; there is serenity
there is no chaos; there is harmony
there is no death: there is the force
Yazar
mervenur


avatar
İstanbul
Kayıt: 06.01.2011
30.04.2013-15:36 #78831
arkadaşlar cevap gleene kadar sql sorgusunu farklı bir şekilde yazdım. burada da paylaşmak istiyorum.
Select	 xsy.STOK_ACIKLAMA
		                                                        ,xsty.X_STOK_TIPI_ACIKLAMA
                                                                ,xsy.STOK_ID
		                                                        ,GIREN = Isnull((Select Sum(Isnull(MIKTAR, 0)) From X_STOK_ISLEMLERI_YENI xsiy With(NoLock) Where STOK_CIKIS = 0 And xsiy.STOK_ID = xsy.STOK_ID), 0)
		                                                        ,CIKAN = Isnull((Select Sum(Isnull(MIKTAR, 0)) From X_STOK_ISLEMLERI_YENI xsiy With(NoLock) Where STOK_CIKIS = 1 And xsiy.STOK_ID = xsy.STOK_ID), 0)
		                                                        ,KALAN = Isnull((Select Sum(Isnull(MIKTAR, 0)) From X_STOK_ISLEMLERI_YENI xsiy With(NoLock) Where STOK_CIKIS = 0 And xsiy.STOK_ID = xsy.STOK_ID), 0) - Isnull((Select Sum(Isnull(MIKTAR, 0)) From X_STOK_ISLEMLERI_YENI xsiy With(NoLock) Where STOK_CIKIS = 1 And xsiy.STOK_ID = xsy.STOK_ID), 0)
                                                        From X_STOKLAR_YENI xsy With(NoLock)
                                                        Inner Join X_STOK_TIPLERI_YENI xsty With(NoLock) On xsty.X_STOK_TIPLERI_ID = xsy.STOK_TIPI


şimdi ise daha karmaşık bir sorguya ihtiyacım var.
Son kullanma tarihine göre stok durum raporu yazıyoruz.
Stok kartı bazlı olacak. Bu işi biraz daha kolaylaştırıyor sanırım.
Yalnız sqlde halledebileceğim bir şey mi yoksa c#.net te mi verilerle oynamam gerekiyor henüz ona bile karar veremedim. Sütun isimlerini daha anlamlı bir şekilde değiştirerek yeniden yazıyorum.
TbStokTip tablosu
InStokTipId int
StStokTipAdi varchar(250)

TbStok tablosu
sütunlar:
InStokId int
StStokKodu varchar(50)
StStokAdi varchar(250)
InStokMiktari int
BoAktif bit

TbStokIslem
InStokIslemId uniqueidentifier
StAciklama varchar(250)
InMiktar int
InStokId int
DtIslemZamani datetime
BoStokCikis bit
DtStokMiadi datetime --Son kullanma tarihi

Son kullanma tarihi sadece stok girişi yaparken kullanılıyor.
Stok çıkışı yaparken hangi miadlı stoktan çıkış yaptığını seçtirmiyoruz. Bu durumda öncelik miadı en küçük olan stok girişlerinde olacak.
Listede şu sütunlar görünecek.
Stok Tipi
Stok Adı
Miadı
Kalan Miktar

Sqlde fonksiyon mu yazılabilir, c# ta datatablelarda mı dönülebilir. Daha önce benzer bir şey yapan arkadaş varsa hiç farketmez hangisi olursa kodları yazabilir, yoksa da fikir yürütmenizi isterim.
Sql daha zor gibi görününce c#ı tercih etmiştim orda da takıldım.
Girişler datatableında foreach ile dönerken çıkışlarda da dönüyorum. Dönme esnasında rowları update edemem diye hatırlıyorum. Kopyasında döneyim desem aslının bazı sütunlarını update edeyim desem .... yani böyle karışık bir durum...
Umarım benzerini daha önce hem de sqlde yapan vardır. Ben de şimdi sqlde fonksiyonla halletmeye çalışacğaım bakalım...












Sevgiyle

Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb