Sub query + left join mantığını kuramadım
Sub query + left join mantığını kuramadım
arkadaşlar merhaba,
iki tane tablom var
1. tablo
depo
id integer,
depokodu integer
2. tablo
stokdevir
depokodu integer,
stokkodu char(30),
islemtarihi date,
miktari integer
1. tabloda
1-Merkez Depo
2-A deposu
3- B deposu
2. tabloda
1-10.08.2011-stkd1-10
2-10.08.2011-stkd2-20
3-10.08.2011-stkd3-40
2-12.08.2011-stkd1-10
3-12.08.2011-stkd2-30
1-12.08.2011-stkd3-10
kısaca açıklayayım
1. tabloda depo kodlarını tutuyorum,
2. tablodada hangi üründen hangi depoda kaç tane var devir olarak giriyorum yani ilk satırda 1 nolu depoya 10.08.2011 tarihinde stkd1 stok kodlu üründen 10 tane devir yapıldı,
benim yapmak istediğim ise bu iki tabloyu kullanarak bi sorgu hazırlamak fakat bi türlü işin içinden çıkamadım yardımcı olursanız sevinirim.
stkd1 stok kodlu üründen hangi depoya kaç tane girilmişse bunların toplamını almak istiyorum yalnız her depoya bu stok kodu ile yapılan en son tarihteki giriş miktarlarını toplamasını istiyorum bu işlemi delphi içinden 8-10 satırlık kod ile çözmek çok kolay ancak ben bu işlemi programın değil veritabanının kendisi yapsın istiyorum
iki tane tablom var
1. tablo
depo
id integer,
depokodu integer
2. tablo
stokdevir
depokodu integer,
stokkodu char(30),
islemtarihi date,
miktari integer
1. tabloda
1-Merkez Depo
2-A deposu
3- B deposu
2. tabloda
1-10.08.2011-stkd1-10
2-10.08.2011-stkd2-20
3-10.08.2011-stkd3-40
2-12.08.2011-stkd1-10
3-12.08.2011-stkd2-30
1-12.08.2011-stkd3-10
kısaca açıklayayım
1. tabloda depo kodlarını tutuyorum,
2. tablodada hangi üründen hangi depoda kaç tane var devir olarak giriyorum yani ilk satırda 1 nolu depoya 10.08.2011 tarihinde stkd1 stok kodlu üründen 10 tane devir yapıldı,
benim yapmak istediğim ise bu iki tabloyu kullanarak bi sorgu hazırlamak fakat bi türlü işin içinden çıkamadım yardımcı olursanız sevinirim.
stkd1 stok kodlu üründen hangi depoya kaç tane girilmişse bunların toplamını almak istiyorum yalnız her depoya bu stok kodu ile yapılan en son tarihteki giriş miktarlarını toplamasını istiyorum bu işlemi delphi içinden 8-10 satırlık kod ile çözmek çok kolay ancak ben bu işlemi programın değil veritabanının kendisi yapsın istiyorum
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Sub query + left join mantığını kuramadım
Örnek kayıtlarınıza göre istediğiniz sonuç nedir?burakb44 yazdı:1. tablo
depo
id integer,
depokodu integer
2. tablo
stokdevir
depokodu integer,
stokkodu char(30),
islemtarihi date,
miktari integer
1. tabloda
1-Merkez Depo
2-A deposu
3- B deposu
2. tabloda
1-10.08.2011-stkd1-10
2-10.08.2011-stkd2-20
3-10.08.2011-stkd3-40
2-12.08.2011-stkd1-10
3-12.08.2011-stkd2-30
1-12.08.2011-stkd3-10
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: Sub query + left join mantığını kuramadım
stkd1 için en son 12.08.2011 tarihinde 10 adet girilmiş , stkd1 için 10 değerini
stkd2 için en son 12.08.2011 tarihinde 30 adet girilmiş , stkd2 için 30 değerini getirmesini istiyorum
tabi sorguyu hazrılarken where kısmında hangi stok kodu için istersek o stok koduna ait değeri getirmesini istiyorum tamamını istemiyorum
stkd2 için en son 12.08.2011 tarihinde 30 adet girilmiş , stkd2 için 30 değerini getirmesini istiyorum
tabi sorguyu hazrılarken where kısmında hangi stok kodu için istersek o stok koduna ait değeri getirmesini istiyorum tamamını istemiyorum
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Sub query + left join mantığını kuramadım
Verilen örnek, SiraNo gibisinden otomatik artan alanınız yokmuş gibi düşünerek hazırlanmış bir sorgudur.Böyle bir durumda son gün yapılmış birden fazla hareket varsa bunlar aynen gelecektir. Eğer otomatik artan alanınız varsa ve bu alan adına SiraNo dersek sorguşeklinde olacaktır.
Kod: Tümünü seç
select * from tablo2 as ana
right join (select depokodu, stokkodu, max(islemtarihi) from tablo2
--where stokkodu='stkd1' -->şartı sorguyu hızlandırır ama şart olmazsa tüm stoklar devreye girer
group by depokodu, stokkodu) as alt on ana.depokodu=alt.depokodu and ana.stokkodu=alt.stokkodu and ana.islemtarihi=alt.islemtarihi
where alt.stokkodu='stkd1' -->stok kodu şartı
Kod: Tümünü seç
select * from tablo2
where SiraNo in
(select max(SiraNo) from tablo2 as ana
right join (select depokodu, stokkodu, max(islemtarihi) from tablo2
--where stokkodu='stkd1' -->şartı sorguyu hızlandırır ama şart olmazsa tüm stoklar devreye girer
group by depokodu, stokkodu) as alt on ana.depokodu=alt.depokodu and ana.stokkodu=alt.stokkodu and ana.islemtarihi=alt.islemtarihi
where alt.stokkodu='stkd1' -->stok kodu şartı
)
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: Sub query + left join mantığını kuramadım
şaban hocam verdiğiniz sorguyu denemidim fakat hata verdi çalışmadı her iki tablodada otomatik artan id isimli bi alanım var
ben istediğim sorguyu ve sonucunu delphi tarafında aşağıdaki kodla yapıyorum, bu koda uygun sorgulama örneği verebilirmisiniz
ben istediğim sorguyu ve sonucunu delphi tarafında aşağıdaki kodla yapıyorum, bu koda uygun sorgulama örneği verebilirmisiniz
Kod: Tümünü seç
Procedure Sorgula(s_kodu:string);
var
t_miktar:real;
Begin
t_miktar := 0;
Depo.Active := False;
Depo.SelectSQL.Clear;
Depo.SelectSQL.Add('Select * From Depo Order By Depo_Kodu');
Depo.Active := True;
Depo.First;
while not Depo.Eof do
begin
s_devir.Active := false;
s_devir.SQL.Clear;
s_devir.SQL.Add('Select * from stok_devir where stok_kodu='''+s_kodu+''' and depo_kodu = '''+Datamodule5.Depo.FieldByName('depo_kodu').AsString+''' order by islem_tarihi ');
s_devir.Active := true;
s_devir.Last;
if s_devir.RecordCount <> 0 then
t_miktar := t_miktar + s_devir.FieldByName('miktari').AsFloat;
Depo.Next;
end;
showmessage(stryap(t_miktar));
End;
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Sub query + left join mantığını kuramadım
Başlık FireBirb'müş
. SQL Server veri tabanını baz alarak vermiştim örneği 


Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Re: Sub query + left join mantığını kuramadım
sabanakman yazdı:Başlık FireBirb'müş. SQL Server veri tabanını baz alarak vermiştim örneği

Re: Sub query + left join mantığını kuramadım
Kod: Tümünü seç
select
sum(alt2.miktari)
from DEPO ana
left join
( select depokodu, max(islemtarihi) it from STOKDEVIR
group by depokodu )
alt1 on (ana.depokodu=alt1.depokodu)
left join STOKDEVIR alt2 on (alt1.depokodu=alt2.depokodu and alt1.it=alt2.islemtarihi)
where stokkodu='stkd1'