Yazar |
|
mervenur
İstanbul
Kayıt: 06.01.2011 |
|
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
Luleburgaz
admin
Kayıt: 15.06.2006 |
|
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
Kayıt: 20.12.2006 |
|
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
Java developer
|
|
Yazar |
|
fealin
Kayıt: 30.01.2006 |
|
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
İstanbul
Kayıt: 06.01.2011 |
|
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
|
|
| |