Logo Destek
Database => SQL => Konuyu başlatan: Recete - 30.10.2020, 14:18
-
Merhaba,
Aşağıdaki sorguda sütunlar arası hesaplamada bir terslik var.
Mesela mevcut 9, Sipariş 1 adet ama Satılabilir durumu -8
SATILABİLİR stok 8 yazması gerekirken -8 yazıyor.
Bir diğer konu da;
13 adet sipariş var, 1 adet şube de var. Mevcut sıfır ise
Satılabilir 12 olması gerekiyor.
Yardımcı olabilir misiniz?
SELECT
I.CODE 'ÜRÜN KODU',
ISNULL((SELECT SUM (DEPO.ONHAND) AS MIKTAR FROM LV_006_01_STINVTOT AS DEPO WHERE (DEPO.INVENNO IN (1)) AND (DEPO.STOCKREF = I.LOGICALREF)),0) AS 'MEVCUT',
SUM(O.AMOUNT) 'SİPARİŞ',
ISNULL((SELECT SUM (DEPO.ONHAND-DEPO.ACTSORDER) AS MIKTAR FROM LV_006_01_STINVTOT AS DEPO WHERE (DEPO.INVENNO IN (2)) AND (DEPO.STOCKREF= I.LOGICALREF)),0) AS 'ŞUBE',
ISNULL((SELECT SUM (DEPO.ONHAND-DEPO.ACTSORDER) AS MIKTAR FROM LV_006_01_STINVTOT AS DEPO WHERE (DEPO.INVENNO IN (-1)) AND (DEPO.STOCKREF = I.LOGICALREF)),0) AS 'SATILABİLİR'
FROM
LG_006_01_STLINE ST RIGHT JOIN
LG_006_ITEMS I ON I.LOGICALREF= O.STOCKREF RIGHT JOIN
LG_006_01_ORFLINE O ON O.LOGICALREF= ST.ORDTRANSREF
WHERE
I.CARDTYPE='12'
GROUP BY
I.CODE,
I.LOGICALREF
-
Üstadlar, bunu çözmem gerekiyor. Yardımcı olabilir ?
-
Merhaba,
Yukarıdaki sorgu çalışmıyor olması lazım (orfline'a bağlantı kurulmadan join atılmış).
Siparişlerde sadece ORFLINE'a refer edilmiş ama herhangi bir kısıtlama yok: satış/satınalma? ITEMS.CARDTYPE=12 ama STLINE veya ORFLINE üzerinde LINETYPE ne? STLINE'a bağlantı sebebi (satış/satınalma - TRCODE)?
Aşağıdaki sorguda sütunlar arası hesaplamada bir terslik var.
Sütunlar arasında herhangi bir işlem yok. Terslik, sütunlara değer gelirken oluşturulan sorgudaki eksiklik.
Kolay gelsin.
-
İlginiz için teşekkür ederim.
Sorgu şu anda çalışıyor. Ancak ORFLINE bağlantısı eksik olduğundan bazı yerlerde sapıtıyor.
Nasıl olmalıdır?
Sorguyu düzeltebilir misiniz?
Selamlar
-
Yardımcı olmaya çalışıyım. Tam olarak yapmak istediğiniz nedir? Malzeme ve depo bazında stok durumları ile sipariş durumlarını mı görmek istiyorsunuz?
-
Merhaba,
Doğrudur dediğiniz gibi yapmaya çalışıyorum.
Teşekkür ederim.
-
Merhaba,
Aşağıdaki işinizi görür heralde ama ORFLINE için LINETYPE ayarlamanız gerekebilir. Firma ve dönem bilgilerinize göre de sorguyu düzeltmeniz gerekir.
Ekran görüntüsü de ekledim nasıl bir sonuç çıktığına dair.
SELECT IT.CODE AS 'Ürün Kodu', ISNULL(B1.X,0) AS 'Toplam Stok', ISNULL(B2.X,0) AS 'Merkez Stok', ISNULL(B3.X,0) AS 'Bekleyen Satış Sipariş',
CASE
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) > 0 THEN CONVERT(varchar,(ISNULL(B1.X,0)-ISNULL(B3.X,0)))
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) <=0 THEN 'Yeteri Kadar Stok Yok'
END AS 'Satılabilir'
FROM LG_507_ITEMS IT
LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_507_01_STINVTOT SI WHERE INVENNO=-1 GROUP BY STOCKREF
) AS B1 ON B1.STOCKREF=IT.LOGICALREF
LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_507_01_STINVTOT SI WHERE INVENNO=0 GROUP BY STOCKREF
) AS B2 ON B2.STOCKREF=IT.LOGICALREF
LEFT JOIN
(
SELECT STOCKREF, SUM(AMOUNT-SHIPPEDAMOUNT) X FROM LG_507_01_ORFLINE ORL WHERE ORL.TRCODE=1 AND ORL.LINETYPE IN (0,7) AND (ORL.AMOUNT-ORL.SHIPPEDAMOUNT > 0 ) AND ORL.STATUS <>2 AND ORL.CANCELLED=0
GROUP BY ORL.STOCKREF
) AS B3 ON B3.STOCKREF=IT.LOGICALREF
WHERE IT.ACTIVE=0
-
Tamamdır. Çok teşekkür ederim. Hakkınızı helal ediniz.
Buna şube ambarını da ilave etmem gerekecek.
MERKEZ STOK Üzerinden Çoğaltarak gidebilir miyim?
Ayrıca stok kartı içerisindeki gurup kodunu buraya yazmadan iç select ile sıralamak ve daha sonra ürün koduna göre sıralama yapmam gerekecek.
ORDER BY En sona mı yazmalıyım?
-
B1 veya B2 sorgusunu kopyalayıp, ambar (INVENNO) değiştirmeniz yeterli ambar eklemek için.
Sıralama yapmak için son satırdaki WHERE'den sonra yazabilirsiniz ORDER BY.
-
Tamamdır. Tekrar teşekkür ederim.
Sağlıcakla kalın .
-
Merhaba,
Aşağıdaki sorguda;
Msg 8114, Level 16, State 5, Line 1
varchar veri türü numeric veri türüne dönüştürülürken hata.
hatası veriyor.
Nasıl düzeltilebilir?
Aslında (yeterli stok yok) yazısı yerine sıfır (0) yazsa nasıl olur?
Demek istediğim (-) durumdaki stokları da sıfır (0) görelim.
Eğer bir üründen sipariş miktarı toplam mevcuttan fazlaysa yani fark < 0 ise doğrudan sıfır yazmalıdır.
Bir diğer konu da;
İç ve dış Selectler sorgu içerisine alınabilir mi?
SELECT
[ÜRÜN KODU],
SHOWROOM,
ŞUBE,
[TOPLAM MEVCUT],
SİPARİŞ,
SATILABİLİR
FROM
(
SELECT * FROM
(
SELECT
I.CODE AS 'ÜRÜN KODU',
I.STGRPCODE,
ISNULL(B2.X,0) 'SHOWROOM',
ISNULL(B4.X,0) 'ŞUBE',
ISNULL(B1.X,0) 'TOPLAM MEVCUT',
ISNULL(B3.X,0) 'SİPARİŞ',
CASE
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) > 0 THEN CONVERT(varchar,(ISNULL(B1.X,0)-ISNULL(B3.X,0)))
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) <=0 THEN 'Yeteri Kadar Stok Yok'
END AS 'Satılabilir'
FROM LG_622_ITEMS I
LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_622_04_STINVTOT SI
WHERE INVENNO=-1 GROUP BY STOCKREF
) AS B1 ON B1.STOCKREF=I.LOGICALREF
LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_622_04_STINVTOT SI
WHERE INVENNO=1 GROUP BY STOCKREF
) AS B2 ON B2.STOCKREF=I.LOGICALREF
LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_622_04_STINVTOT SI
WHERE INVENNO=2 GROUP BY STOCKREF
) AS B4 ON B4.STOCKREF=I.LOGICALREF
LEFT JOIN
(
SELECT STOCKREF, SUM(AMOUNT-SHIPPEDAMOUNT) X FROM LG_622_04_ORFLINE ORL
WHERE ORL.TRCODE=1 AND ORL.LINETYPE IN (0,7) AND (ORL.AMOUNT-ORL.SHIPPEDAMOUNT > 0 ) AND ORL.STATUS <>2 AND ORL.CANCELLED=0
GROUP BY ORL.STOCKREF
) AS B3 ON B3.STOCKREF=I.LOGICALREF
WHERE I.CARDTYPE=12
)
AS T
WHERE
CAST(SHOWROOM AS decimal(38,2))>0 OR
CAST(ŞUBE AS decimal(38,2))>0 OR
CAST([TOPLAM MEVCUT] AS decimal(38,2))>0 OR
CAST(SİPARİŞ AS decimal(38,2))>0 OR
CAST(SATILABİLİR AS decimal(38,2))>0
) TS
ORDER BY STGRPCODE, [ÜRÜN KODU]
-
Merhaba,
CASE
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) > 0 THEN ISNULL(B1.X,0)-ISNULL(B3.X,0)
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) <=0 THEN 0
END AS 'Satılabilir'
olarak değiştirilebilir.
-
Tamamdır. Bilgi ve yardımınız için teşekkür ederim.
Kolay gelsin.