GROUP BY İşleminde SUM’a Değişken Atayamama Hatası

SORU:

Sorgu hata mesajı vermiyor, fakat bakiye sürekli sıfır çıkıyor.
Başlangıçtaki set sıfırları kaldırdığım zaman ise bakiye listenin en sonundakinin stok bakiye değerini alıyor.
O da ilk çalıştığında null oluyor, ikinci kez çalıştığında ancak o değeri veriyor.

Veritabanı Yapısı ve Örnek Kodlamayı görmek için tıklayınız.

Set @deggiren =0;
Set @degcikan =0;
Set @bakiye =0;
select *,
(@deggiren := sum(if(STKHARTIPI=1,STKHARMIKTAR,0))) AS GIREN,
(@degcikan := sum(if(STKHARTIPI=2,STKHARMIKTAR,0))) AS CIKAN,
@deggiren - @degcikan = @bakiye, @bakiye as BAKIYE
from dbo_stkhar
LEFT JOIN dbo_stkkart ON STKHARSTKKOD=STKKOD
where STKHARCALFLAG=1 AND STKHARISLEMTIP=1 AND @bakiye > 0
group by STKHARSTKKOD

 


CEVAP:

SET ile yapılan sorgulamalarda işlemler iki adımda çalışmaktadır. Burada çalıştırdığınız ilk zaman değerler sizinde dediğiniz gibi ilgili değişkene atanır. Tekrardan ilgili değişkeni kullanarak istediğiniz işlemler yapılmaktadır.

En basit örneğini buraya tıklayarak görebilirsiniz.

Sorgunuzdaki mantığa istinaden aşağıdaki gibi bir sql sorgusu işinize yarayacaktır:

SELECT 
sum( if(STKHARTIPI=1,STKHARMIKTAR,0) ) AS GIREN,
sum( if(STKHARTIPI=2,STKHARMIKTAR,0) ) AS CIKAN,
sum( if(STKHARTIPI=1,STKHARMIKTAR,0) ) - sum( if(STKHARTIPI=2,STKHARMIKTAR,0) ) AS bakiye
FROM dbo_stkhar
WHERE STKHARCALFLAG=1 AND STKHARISLEMTIP=1
GROUP BY STKHARSTKKOD
HAVING GIREN-CIKAN > 0;

Paylaş: