1

Konu: select komutu

ilaclar dosyası :
ilaclar
giren
cikan
stok

fatura dosyası (girenler)
ilclar
miktar

kullanılan dosyası(çıkışlar)
ilaclar
miktar

ilaclar dosyasında ilacların listesi var yapmak istediğim ;
fatura dosyasında bu ilaçlaların giriş kayıtları tutuluyor. kullanılan dosyasındada bu ilaçların çıkış kayıtları tutuluyor

yapmak istediğim ilaçlar dosyasında giren kısmına o ilacın fatura kayıtlarındaki toplam mıktarını;
cikan kısmınaysa kullanılan dosyasındaki o ilacın toplam miktarını stok bölümüneyse bu iki toplamın farkını yazdırmak bu işi select komutuyla yapmak mümkünmü ?

cevaplar için teşekkürler şimdiden

2

Re: select komutu

Visual Fox Pro
Close Tables All

 
Create Cursor ilaclar(ilaclar c(10),giren I,cikan I,stok I)
Insert Into ilaclar(ilaclar,giren,cikan,stok) Values("aspirin",0,0,0)
Insert Into ilaclar(ilaclar,giren,cikan,stok) Values("zakkum",0,0,0)
Insert Into ilaclar(ilaclar,giren,cikan,stok) Values("zikkim",0,0,0)
 
Create Cursor fatura(ilaclar c(10),miktar I)
 
Create Cursor kullanilan(ilaclar c(10),miktar I)
 
Insert Into fatura(ilaclar,miktar) Values("aspirin",10)
Insert Into fatura(ilaclar,miktar) Values("zakkum",5)
Insert Into fatura(ilaclar,miktar) Values("zikkim",7)
 
Insert Into kullanilan(ilaclar,miktar) Values("aspirin",2)
Insert Into kullanilan(ilaclar,miktar) Values("zakkum",3)
Insert Into kullanilan(ilaclar,miktar) Values("zikkim",4)
Insert Into kullanilan(ilaclar,miktar) Values("zakkum",1)
Insert Into kullanilan(ilaclar,miktar) Values("zikkim",1)
 
Select ilaclar,Sum(miktar) As giren From fatura Group By 1 Into Cursor crsGiren NOFILTER
Select ilaclar,Sum(miktar) As cikan From kullanilan Group By 1 Into Cursor crsCikan NOFILTER
 
Update ilaclar Set ;
    giren = crsGiren.giren,;
    cikan = crsCikan.cikan,;
    stok = crsGiren.giren - crsCikan.cikan;
    from ilaclar;
    INNER Join crsGiren On crsGiren.ilaclar = ilaclar.ilaclar;
    INNER Join crsCikan On crsCikan.ilaclar = ilaclar.ilaclar
 
 
Select ilaclar
 
BROWSE TITLE "Stok Durum"

3

Re: select komutu

Bu sekilde tutmanin en onemli derdi ilaclar dosyasina her fatura girisi yapilan ilacin yazildigindan emin olmak. Triggerla yapilir da, bu her zaman fatura ve kullanilan dosyasindan cikarilabilecek bir veri. Ikincisi her giren mutlaka kullanilacak diye birsey yok. Soykan'in kodundan biraz hazira kondum:

Visual Fox Pro
Create Cursor fatura(ilaclar c(10),miktar I)

 
Create Cursor kullanilan(ilaclar c(10),miktar I)
 
Insert Into fatura(ilaclar,miktar) Values("aspirin",10)
Insert Into fatura(ilaclar,miktar) Values("zakkum",5)
Insert Into fatura(ilaclar,miktar) Values("zikkim",7)
Insert Into fatura(ilaclar,miktar) Values("aspirin",10)
Insert Into fatura(ilaclar,miktar) Values("azitromisin",10)
 
Insert Into kullanilan(ilaclar,miktar) Values("aspirin",2)
Insert Into kullanilan(ilaclar,miktar) Values("zakkum",3)
Insert Into kullanilan(ilaclar,miktar) Values("zikkim",4)
Insert Into kullanilan(ilaclar,miktar) Values("zakkum",1)
Insert Into kullanilan(ilaclar,miktar) Values("zikkim",1)
 
Select crsGiren.ilaclar, giren, ;
  Cast(Nvl(cikan,0) As Int) As cikan, ;
  Cast(giren-Nvl(cikan,0) As Int) As kalan ;
  from ;
  (Select ilaclar,Sum(miktar) As giren From fatura Group By 1) crsGiren ;
  left Join ;
  (Select ilaclar,Sum(miktar) As cikan From kullanilan Group By 1) crsCikan ;
  on crsGiren.ilaclar == crsCikan.ilaclar

4

Re: select komutu

her ikinizede çok ama çok teşekkürler.