Farklı farklı yöntemleri var, aşağıdaki 2 sorgu ile de sorununuzu çözebilirsiniz, Genel olarak kolona göre case when yada farklı tabloymuş gibi kullanarak çözebilirsiniz
1.yol
select MalzemeAdi,OlcuBirimi, sum (Miktar * (case when Durum='MalzemeGiris' then 1 else -1 end) ) as Miktar from Stok where ?????? group by MalzemeAdi, OlcuBirimi
2.yol
select s1.MalzemeAdi,s1.OlcuBirimi, sum (s1.Miktar) - sum (s2.Miktar) as Miktar from Stok s1,Stok s2 where s1.Durum='MalzemeGiris' AND s2.Durum='MalzemeCikis' group by s1.MalzemeAdi, s2.OlcuBirimi
Kolay gelsin, İyi çalışmalar
Stok Id MalzemeAdi OlcuBirimi Miktari Durum
1 Ekmek Adet 20 Giriş
2 Ekmek Adet 10 Giriş
3 Patates Kg 5 Giriş
4 Ekmek Adet 5 Çıkış
5 Patates Kg 5 Çıkış
6 Elma Kg 15 Giriş
Faruk hocam;
1. yolda when anahtar sözcüğü hatası verdi. Benden kaynaklı yapamadım.
2. yolda ise başka malzemelerde çıkış olmamasına veya malzeme bitmesine rağmen farklı sonuç çıkardı.
Yukarıdaki veritabanı kayıtlarına göre, datagridviewde aşagıdaki sonucu gösteremedim.
MalzemeAdi OlcuBirimi Miktar
Ekmek Adet 25
Elma Adet 15
Kardeşim 1.yol için istersen uzak bağlantı ile destek verebilirim
2.yol için ise PrimaryKey ile de eşleştirmen gerekiyordu, PK kolon adını bilmediğimden yazmamıştım, aşağıdaki gibi kullanmayı denemelisin
select s1.MalzemeAdi,s1.OlcuBirimi, sum (s1.Miktar) - sum (s2.Miktar) as Miktar from Stok s1,Stok s2 where s1.[Stok Id]=s2.[Stok Id] AND s1.Durum='MalzemeGiris' AND s2.Durum='MalzemeCikis' group by s1.MalzemeAdi, s2.OlcuBirimi
Hocam sabah denedim ama yine yapamadım. Veritabanı olarak ACCESS kullanıyorum. Bununla alakası olabilir mi? Uygulamada aşağıdaki kodları kullandım. Bir örnek uygulama yapabilirmisiniz?
Stok Id MalzemeAdi OlcuBirimi Miktari Durum
1 Ekmek Adet 20 MalzemeGiris
2 Ekmek Adet 10 MalzemeGiris
3 Patates Kg 5 MalzemeGiris
4 Ekmek Adet 5 MalzemeCikis
5 Patates Kg 5 MalzemeCikis
6 Elma Kg 15 MalzemeGiris
OleDbConnection baglanti = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + Application.StartupPath + "\\data.accdb");
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnTumStok_Click(object sender, EventArgs e)
{
OleDbDataAdapter da = new OleDbDataAdapter("select * from Stok", baglanti);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
baglanti.Close();
}
private void btnCaseWhen_Click(object sender, EventArgs e)
{
OleDbDataAdapter da = new OleDbDataAdapter("select MalzemeAdi,OlcuBirimi, sum (Miktar * (case when Durum='MalzemeGiris' then 1 else -1 end) ) as Miktar from Stok group by MalzemeAdi, OlcuBirimi", baglanti);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
baglanti.Close();
}
private void btnKolonaGore_Click(object sender, EventArgs e)
{
OleDbDataAdapter da = new OleDbDataAdapter("select s1.MalzemeAdi,s1.OlcuBirimi, sum (s1.Miktar) - sum (s2.Miktar) as Miktar from Stok s1,Stok s2 where s1.[StokId]=s2.[StokId] AND s1.Durum='MalzemeGiris' AND s2.Durum='MalzemeCikis' group by s1.MalzemeAdi, s1.OlcuBirimi", baglanti);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
baglanti.Close();
}
Ben SQL olarak MSSQL kullanıyorum, dolayısıyla verdiğim kodlar da MSSQL e göre, Access i sadece bu şekilde yardım isteyen arkadaşlar projelerini incelemem için gönderdiklerinde inceleyerek kullanıyorum, o yuzden verdiğim kodlar access de çalışmıyor olabilir, SQL yapısı temelde bütününde benzer olsa da kısmen bazı bölümlerde farklılıklar olabiliyor, dilerseniz faukunal@gmail.com adresine projenizi gönderin, onun üzerinde çalışma yaparsam daha net bir sonuca ulaşırız
Kolay gelsin, iyi çalışmalar
Proje denecek bir şey değil aslında, işyerindeki yemekhane için, giriş çıkışların girildiği, ne kadar Malzeme kaldı bunu yapmaya çalışıyorum.
Daha önce uygulamayı mail olarak atmaya çalıştım fakat güvenlik açığı hatası verip, göndermedi.
Hocam veritabandaki tablo, yukarıdaki gibi. Tek bir form sayfası üzerinde sayfa yüklendiğinde datagridviewe çekip göstermeniz yeterli.
Kaç saattir kodu değiştirip değiştirip deniyorum olmuyor..
Kardeşim faukunal@gmail.com adresine ammyy yada teamviewer bağlantı bilgilerini gönder, bağlanarak yardımcı olmaya çalışıyım, sanırım daha makbule geçecek
Gonderdim faruk hocam
uzak bağlantı kurularak aşağıdaki sorgu yazıldı ve sorun çözüldü
Select MalzemeAdi, OlcuBirimi,SUM( IIF(Durum='Giriş',Miktar,-1*Miktar) ) as Adet from Stok group by MalzemeAdi, OlcuBirimi