Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SQL de Asgari Stok bulma
#1
Arkadaşlar Merhaba; Netsis de Asgari stok bulmak için bir kod yazmaya çalıştım ama bir hata veriyor yardımcı olabilir misiniz?

Yapmak istediğim 
TBLSTHAR da STHAR_GCKOD bu "G" ise Giriş "C" ise Çıkış anlamında 
                                               STHAR_GCMIK ise stok miktarı

TBLCARISTOK da ASGARI_STOK ise stok miktarı. Buradaki işlemi şöyle yapmak istedim ,
eğer stok hareketindeki "TBLSTHAR.STHAR_GCMIK" atıyorum 5 e düştüğünde "TBLCARISTOK.ASGARI_STOK" eşitlendiğinde veya altına düştüğünde miktar kritik diyecek 
 
DECLARE @MINSTOK INT
DECLARE @ASGARISTOK INT

SET @ASGARISTOK=(SELECT
(CASE SH.STHAR_GCKOD WHEN 'G' THEN SUM(SH.STHAR_GCMIK) ELSE 0 END) - (CASE SH.STHAR_GCKOD WHEN 'C' THEN SUM(SH.STHAR_GCMIK) ELSE 0 END)
FROM TBLSTHAR SH
GROUP BY SH.STHAR_GCKOD,SH.STHAR_GCMIK)

SET @MINSTOK=(SELECT TBLCARISTOK.ASGARI_STOK
FROM TBLCARISTOK
WHERE TBLCARISTOK.STOK_KODU='4190')

IF (@MINSTOK < @ASGARISTOK)
BEGIN
PRINT 'ürünün stoğu kritik seviyede'
END
ELSE
BEGIN
PRINT 'Ürün için yeterli miktarda stok mevcut'
END

Msg 512, Level 16, State 1, Line 5
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Ürün için yeterli miktarda stok mevcut
Cevapla
#2
  SET @MINSTOK=(SELECT TBLCARISTOK.ASGARI_STOK pid='43249' dateline='1611983960']FROM TBLCARISTOK
WHERE TBLCARISTOK.STOK_KODU='4190')
Burada subselectde birden fazla stok kaydı dönüyor ve onu @MINSTOK değişkenine atamıyor

Burada da aynı sorun olabilir .
SET @ASGARISTOK=(SELECT

(CASE SH.STHAR_GCKOD WHEN 'G' THEN SUM(SH.STHAR_GCMIK) ELSE 0 END) - (CASE SH.STHAR_GCKOD WHEN 'C' THEN SUM(SH.STHAR_GCMIK) ELSE 0 END)
FROM TBLSTHAR SH
GROUP BY SH.STHAR_GCKOD,SH.STHAR_GCMIK)


 
Subselectte top 1 yap veya where şartını gözden geçir bence.
Sorsaydı Bilirdi Sormuyor ki Bilsin.
Bilseydi Sorardı Bilmiyor ki Sorsun. 
Cevapla
#3
Farklı tablodan almayı denedim ama bu sefer de ASGARI_STOK eşitleyemedim.
DECLARE @MINSTOK INT
DECLARE @ASGARISTOK INT
SET @ASGARISTOK=(SELECT ASGARI_STOK FROM TBLCARISTOK)
SELECT DISTINCT TBLSTOKPH.STOK_KODU, TBLSTSABIT.STOK_ADI,
(TOP_GIRIS_MIK-TOP_CIKIS_MIK) AS 'BAKIYE', TBLCARISTOK.ASGARI_STOK AS ASGARI_STOK
FROM TBLSTOKPH
INNER JOIN TBLSTSABIT ON (TBLSTSABIT.STOK_KODU = TBLSTOKPH.STOK_KODU)
LEFT OUTER JOIN TBLCARISTOK ON (TBLSTOKPH.STOK_KODU=TBLCARISTOK.STOK_KODU)
IF (@MINSTOK <= @ASGARISTOK)
BEGIN
PRINT 'ürünün stoğu kritik seviyede'
END

Msg 512, Level 16, State 1, Line 3
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

(4796 row(s) affected)
Cevapla
#4
SQL de subquery yazmayi bi gözden geçirelim
Bu sorgudan bir stok satırı dönmelidir ve onu @MINSTOK değişkenine alır.
SELECT @MINSTOK = MINSTOK FROM STOKTABLE WHERE STOKKODU = 'ABC123'
Eğer birden fazla dönen satırı bir değişkene almaya çalışırsan üstteki gibi hata alırsın. 

ikinci olarak bu sorgundan tek satır dönemiyorsa TOP 1 ile herhangi bir tek satır dönmesini garanti altına alabilirsin.
SELECT TOP 1 @MINSTOK = MINSTOK FROM STOKTABLE WHERE STOKKODU = 'ABC123'  ORDER BY   SIRALA   
hangi satırın döneceğine order by ile sıralayarak kaRar verirsin.

Bu şekilde bir stok için asgari ve azami stok değerlerini değişkene alıp istediğin kontrolü yapabilirsin.
Sorsaydı Bilirdi Sormuyor ki Bilsin.
Bilseydi Sorardı Bilmiyor ki Sorsun. 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Stok Karlılık Raporu (NETSIS) OZCANK 2 705 14-04-2023, Saat: 14:25
Son Yorum: OZCANK
  Bakanlıktan Bitki Koruma Ürünleri Stok Bilgisi Alınması bünyamin68 39 9.766 26-03-2023, Saat: 12:21
Son Yorum: varyemez
  Dosya content type bulma tuna 7 1.811 18-01-2023, Saat: 20:29
Son Yorum: tuna
  Kayıt bulma. enigma 7 1.411 11-01-2023, Saat: 21:49
Son Yorum: enigma
  Örnek stok takip programı power 22 5.773 21-09-2022, Saat: 22:34
Son Yorum: power



Konuyu Okuyanlar: 1 Ziyaretçi