SQL'de Eldeki Stok ve Fiyatlar...

Gönderen Konu: SQL'de Eldeki Stok ve Fiyatlar...  (Okunma sayısı 5430 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı LsuErsoy

  • LOGO Bayi
  • Logo Uzmanı
  • *****
  • Karma: 33
  • Kişisel ileti
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #15 : 02.10.2007, 14:28 »
Tekrar Merhabalar ; Aşağıdaki kodu (Firma No ve Dönem noları gerektiği gibi düzelttim.) , Enterprise Manager a kopyalayıp RUN ladığımda JPG deki hatayı alıyorum.

Query Analyzer a kopyalayıp RUN ladığımda ise gayet güzel çalışıyor.

Query i Enterprise Manager e kopyalayıp çalıştırmak isteyişimin nedeni ise Query nin METODOLOJİSİNİ anlamak.

Bu querynin her bir komut ve satırının ne işe yaradığını anlayabilirsem , oldukça büyük mesafe kat etmiş olacağımın farkındayım.

Kolay gelsin , iyi çalışmalar...

SELECT
URUN.CODE AS 'ÜRÜN KODU',
URUN.NAME AS 'ÜRÜN ADI',
'GENEL  '= CASE WHEN (AMBARM.MIKTAR IS NULL) THEN '0' WHEN (AMBARM.MIKTAR IS NOT NULL) THEN AMBARM.MIKTAR END,
'AMBAR 1'= CASE WHEN (AMBAR1.MIKTAR IS NULL) THEN '0' WHEN (AMBAR1.MIKTAR IS NOT NULL) THEN AMBAR1.MIKTAR END,
'AMBAR 2'= CASE WHEN (AMBAR2.MIKTAR IS NULL) THEN '0' WHEN (AMBAR2.MIKTAR IS NOT NULL) THEN AMBAR2.MIKTAR END,
'AMBAR 3'= CASE WHEN (AMBAR3.MIKTAR IS NULL) THEN '0' WHEN (AMBAR3.MIKTAR IS NOT NULL) THEN AMBAR3.MIKTAR END,
'AMBAR 4'= CASE WHEN (AMBAR4.MIKTAR IS NULL) THEN '0' WHEN (AMBAR4.MIKTAR IS NOT NULL) THEN AMBAR4.MIKTAR END,
'AMBAR 5'= CASE WHEN (AMBAR5.MIKTAR IS NULL) THEN '0' WHEN (AMBAR5.MIKTAR IS NOT NULL) THEN AMBAR5.MIKTAR END,
'A.FIYAT'= CASE WHEN (ALIS.MIKTAR IS NULL) THEN '0' WHEN (ALIS.MIKTAR IS NOT NULL) THEN ALIS.MIKTAR END,
'S.FIYAT'= CASE WHEN (SATIS.MIKTAR IS NULL) THEN '0' WHEN (SATIS.MIKTAR IS NOT NULL) THEN SATIS.MIKTAR END,
'A.DEGER'= CASE WHEN (AMBARM.MIKTAR * ALIS.MIKTAR IS NULL) THEN '0' WHEN (AMBARM.MIKTAR * ALIS.MIKTAR IS NOT NULL) THEN AMBARM.MIKTAR * ALIS.MIKTAR END,
'S.DEGER'= CASE WHEN (AMBARM.MIKTAR * SATIS.MIKTAR IS NULL) THEN '0' WHEN (AMBARM.MIKTAR * SATIS.MIKTAR IS NOT NULL) THEN AMBARM.MIKTAR * SATIS.MIKTAR END

FROM
{oj LG_FFF_ITEMS URUN
LEFT JOIN (SELECT SUM(ONHAND) MIKTAR,STOCKREF FROM LG_FFF_DD_STINVTOT WHERE INVENNO=-1 GROUP BY STOCKREF)
AMBARM ON URUN.LOGICALREF = AMBARM.STOCKREF
LEFT JOIN (SELECT SUM(ONHAND) MIKTAR,STOCKREF FROM LG_FFF_DD_STINVTOT WHERE INVENNO=0 GROUP BY STOCKREF)
AMBAR1 ON URUN.LOGICALREF = AMBAR1.STOCKREF
LEFT JOIN (SELECT SUM(ONHAND) MIKTAR,STOCKREF FROM LG_FFF_DD_STINVTOT WHERE INVENNO=1 GROUP BY STOCKREF)
AMBAR2 ON URUN.LOGICALREF = AMBAR2.STOCKREF
LEFT JOIN (SELECT SUM(ONHAND) MIKTAR,STOCKREF FROM LG_FFF_DD_STINVTOT WHERE INVENNO=2 GROUP BY STOCKREF)
AMBAR3 ON URUN.LOGICALREF = AMBAR3.STOCKREF
LEFT JOIN (SELECT SUM(ONHAND) MIKTAR,STOCKREF FROM LG_FFF_DD_STINVTOT WHERE INVENNO=3 GROUP BY STOCKREF)
AMBAR4 ON URUN.LOGICALREF = AMBAR4.STOCKREF
LEFT JOIN (SELECT SUM(ONHAND) MIKTAR,STOCKREF FROM LG_FFF_DD_STINVTOT WHERE INVENNO=4 GROUP BY STOCKREF)
AMBAR5 ON URUN.LOGICALREF = AMBAR5.STOCKREF
LEFT JOIN ((SELECT MAX(PRICE) AS 'MIKTAR',CARDREF FROM LG_FFF_PRCLIST WHERE PTYPE=1 GROUP BY CARDREF))
ALIS ON URUN.LOGICALREF = ALIS.CARDREF
LEFT JOIN ((SELECT MAX(PRICE) AS 'MIKTAR',CARDREF FROM LG_FFF_PRCLIST WHERE PTYPE=2 GROUP BY CARDREF))
SATIS ON URUN.LOGICALREF = SATIS.CARDREF
}
WHERE URUN.CARDTYPE<>'22'
ORDER BY URUN.CODE


Merhabalar Bu sorguyu yazabilmek için ; sırası ile hangi adımları düşündünüz...yani kafanızda algoritmayı kurmak için bazı bilgilerden yararlanarak yargılar ürettiniz...yani önce şununla şunu ilişkilendirmeliyim , şuna göre gruplamalıyım (Nedeni?) , şuna göre toplatmalıyım gibi sorularınızı sorup cevpalarınıda verekrek ayrıntılı bir açıklama yapabilirseniz sevinirim...

FROM
{oj
LG_FFF_ITEMS URUN..........bu kodda OJ ifadesi neden kullanıldı ?...

INNER JOİN mantığı nedir ? gibi...

adım adım bu kodu açıklarsanız çok minnettar kalacağım...

kolay gelsin , iyi çalışmalar...
« Son Düzenleme: 02.10.2007, 14:31 Gönderen: lsuersoy »

Çevrimdışı Koray Ü.

  • Uzman Kullanıcı
  • Logo Uzmanı
  • *****
  • Karma: 8
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #16 : 10.11.2007, 12:19 »
Şu konuyu biraz daha ısıtalım....  ::)

Hem Go'dan alınan malzeme değer raporunda, hem de Sayın Memorphin'in yazdığı sorguda şöyle bir hata var:

Malzemeler için girilen fiyat kartı şayet ana birim değil de, 2. veya 3.birim için tanımlanmışsa ne Go, ne de bu sorgu fiyatı ana birime dönüştürmeden hesaplıyor. Bu da inanılmaz hatalara yol açabiliyor.

Biraz daha açmak gerekirse;
Örneğin bir malzememiz var. Küp şeker diyelim. Birimleri paket ve koli. Her koli 25 paket ve ana birim de koli. Eğer siz alış fiyat kartını ana birim olan koli üzerinden değil de paket üzerinden tanımlarsanız rapor ana birim olan kolinin eldeki stok miktarı ile paket fiyatını çarpıyor. Ve çok vahim hatalar doğabiliyor.
Bu durumu Logo'ya bildirdiğimde
"Birim setlerini kontrol edin ve fiyat kartındaki "diğer birimlere çevrilebilir" kutusunu işaretleyin." dendi ama zaten bütün fiyatlar bu şekilde tanımlı.

Dolayısıyla ya bu sorguları düzenleyeceğiz, ya da fiyat kartlarını sadece ana birim üzerinden tanımlamak zorunda kalacağız....