Kod: Tümünü seç
SELECT
URUN.URUNADI,
KALAN=(SELECT SUM(MIKTAR) FROM STOK WHERE TURU=GIRIS AND STOK.URUN_ID=URUN.URUN_ID)-(SELECT SUM(MIKTAR) FROM STOK WHERE TURU=CIKIS AND STOK.URUN_ID=URUN.URUN_ID)
FROM
URUN order by URUN.URUNADI
Kod: Tümünü seç
SELECT
URUN.URUNADI,
KALAN=(SELECT SUM(MIKTAR) FROM STOK WHERE TURU=GIRIS AND STOK.URUN_ID=URUN.URUN_ID)-(SELECT SUM(MIKTAR) FROM STOK WHERE TURU=CIKIS AND STOK.URUN_ID=URUN.URUN_ID)
FROM
URUN order by URUN.URUNADI
Kod: Tümünü seç
SELECT
URUN.URUNADI,
KALAN=(SELECT ISNULL(SUM(MIKTAR),0) FROM STOK WHERE TURU=GIRIS AND STOK.URUN_ID=URUN.URUN_ID)-(SELECT ISNULL(SUM(MIKTAR),0) FROM STOK WHERE TURU=CIKIS AND STOK.URUN_ID=URUN.URUN_ID)
FROM
URUN order by URUN.URUNADI
Kod: Tümünü seç
SELECT
URUN.URUNADI,
case
when (SELECT COUNT(URUN_ID) FROM STOK WHERE TURU=CIKIS AND STOK.URUN_ID=URUN.URUN_ID)=0 then
(SELECT SUM(MIKTAR) FROM STOK WHERE TURU=1 AND STOK.URUN_ID=URUN.URUN_ID)-0
when (SELECT SUM(MIKTAR) FROM STOK WHERE TURU=CIKIS AND STOK.URUN_ID=URUN.URUN_ID)>0 then
(SELECT SUM(MIKTAR) FROM STOK WHERE TURU=GIRIS AND STOK.URUN_ID=URUN.URUN_ID)-(SELECT SUM(MIKTAR) FROM STOK WHERE TURU=CIKIS AND STOK.URUN_ID=URUN.URUN_ID)
end
AS KALAN
FROM
URUN order by URUN.URUNADI
Kod: Tümünü seç
SELECT
URUN.URUNADI,
ISNULL(SUM(CASE WHEN TURU ='GIRIS' THEN MIKTAR WHEN TURU ='CIKIS' THEN -MIKTAR END),0) AS KALAN
FROM
URUN LEFT OUTER JOIN STOK ON URUN.URUN_ID=STOK.URUN_ID
GROUP BY URUN.URUNADI
order by URUN.URUNADI
Kod: Tümünü seç
KOD EKSİK TANIMLANMIŞ DOĞRUSU AŞAĞIDA
@conari hocam dediğiniz gibi turu alanını bit olarak ayarladım. Giriş yerine 1 , çıkış yerine de 0 yaptım. Verdiğiniz sql'i uygulamaya çalıştım ancak şöle bir hata verdi ??conari yazdı:Bence hareket tablosundan çekersen daha iyi, hareketi olmayanlar gelmez daha hızlı rapor alırsın. isnulla da gerek kalmaz.Kod: Tümünü seç
SELECT URUN.URUNADI, SUM(CASE WHEN TURU ='GIRIS' THEN MIKTAR else -MIKTAR END) AS BAKIYE FROM STOK INNER JOIN URUN ON (URUN.URUN_ID=STOK.URUN_ID) GROUP BY stok.URUN_ID order by stok.URUN_ID
TURU Gibi alanlar içinde tek karakter kullanırsınız daha iyi 0 veya 1 yada G veya C gibi
Kod: Tümünü seç
SELECT
URUN.URUNADI,
SUM(CASE WHEN TURU =0 THEN MIKTAR else -MIKTAR END) AS BAKIYE
FROM STOK
INNER JOIN URUN ON (URUN.URUN_ID=STOK.URUN_ID)
GROUP BY stok.URUN_ID
order by stok.URUN_ID
Kod: Tümünü seç
Column 'URUN.URUNADI' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Kod: Tümünü seç
SELECT
STOK.URUN_ID,
URUN.URUNADI, ''sabit tablodan ismi getir.
SUM(CASE WHEN TURU =0 THEN MIKTAR else -MIKTAR END) AS BAKIYE
FROM STOK ''Hareket tablosundan miktarı topla
INNER JOIN URUN ON (URUN.URUN_ID=STOK.URUN_ID) '' iki tabloyu birbirine ID ile bağla
GROUP BY STOK.URUN_ID, URUN.URUNADI '' sabit tablodaki ürün adına göre grupla
ORDER BY STOK.URUN_ID ''Hareket tablosundaki ID ye göre sırala
Evet haklısın hareket tablosundaki ID yi select e eklemeyi unutmuşum. ilk cümlede zaten null kayıtlar döner çalışmazdı.unicorn64 yazdı:@conari hocam haklısınız daha hızlı rapor alınır belki ama hareket kaydı olmayanlar gelmeyecektir bu şekilde, çok fazla ürün varsa da hareket görmemiş olanları (hareket görmediği için bakiyesi olmayanları) görmek sıkıntı olacaktır.