SQL'de Eldeki Stok ve Fiyatlar...

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

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Koray Ü.

  • Uzman Kullanıcı
  • Logo Uzmanı
  • *****
  • Karma: 8
SQL'de Eldeki Stok ve Fiyatlar...
« : 25.09.2007, 12:30 »
Merhaba.
Malzemelerin eldeki stok miktarları ile tanımlı alış fiyatlarının çarpımını hesaplatarak ambarlardaki malzemelerin toplam değerlerini bulmak istiyorum.

Eldeki stokta problem yok:

SELECT     MALZEME.CODE, MALZEME.NAME, TOPLAM.ONHAND AS 'STOK MİKTARI'
FROM         LG_001_ITEMS MALZEME INNER JOIN
                      LG_001_02_GNTOTST TOPLAM ON TOPLAM.STOCKREF = MALZEME.LOGICALREF
WHERE   (TOPLAM.INVENNO = 0) AND (TOPLAM.ONHAND > 0)
ORDER BY CODE


Ancak fiyatları malzemeler ile eşleştiremedim. Fiyatlar  LG_001_PRCLIST tablosunda ve her malzeme için sadece bir tane alış fiyatı var. Ancak bazı fiyatlar ana birim için, bazıları 2. 3. birimler için girilmiş..

STOK AÇIKLAMASI       ELDEKİ STOK          ALIŞ FİYATI         STOK DEĞERİ
-------------------------        ------------------         ------------------        -------------------
A                                      B                                C                        D=B x C

şeklinde bir sorgu yazmam için yardımcı olursanız çok sevinirim...
Selamlar..

Çevrimdışı Koray Ü.

  • Uzman Kullanıcı
  • Logo Uzmanı
  • *****
  • Karma: 8
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #1 : 27.09.2007, 14:26 »
baktım kimseden ses çıkmıyor, şöyle bir sorgu yazayım dedim:

SELECT
(SELECT MAL.CODE AS KODU, MAL.NAME AS AÇIKLAMA FROM LG_001_ITEMS MAL),
(SELECT HAREKET.ONHAND AS 'ELDEKİ STOK' FROM  LG_001_02_GNTOTST HAREKET),
(SELECT FIYAT.PRICE AS 'TANIMLI FIYAT'  FROM  LG_001_PRCLIST PRICE)
WHERE (HAREKET.STOCKREF = MAL.LOGICALREF) AND (PRICE.CARDREF=MAL.LOGICALREF) AND  (HAREKET.INVENNO = 0) AND (HAREKET.ONHAND > 0)
ORDER BY CODE

ama şu hatayı veriyor:
Yürütmede hata:
The column prefix 'FIYAT' does not match with a table name or alias name used in the query.
The column prefix 'HAREKET' does not match with a table name or alias name used in the query.
The column prefix 'MAL' does not match with a table name or alias name used in the query.
The column prefix 'PRICE' does not match with a table name or alias name used in the query.
The column prefix 'MAL' does not match with a table name or alias name used in the query.
The column prefix 'HAREKET' does not match with a table name or alias name used in the query.
The column prefix 'HAREKET' does not match with a table name or alias name used in the query.

Çevrimdışı memorphin

  • LOGO Bayi
  • Logo Uzmanı
  • *****
  • Karma: 25
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #2 : 27.09.2007, 16:00 »
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

Çevrimdışı memorphin

  • LOGO Bayi
  • Logo Uzmanı
  • *****
  • Karma: 25
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #3 : 27.09.2007, 16:02 »
birden fazla ambar için yapmıştım ambar bağlantılarını silerseniz işinize yarayabilir

Çevrimdışı MehmetYavuz

  • Logo Sistem Administrator
  • Logo Uzmanı
  • *****
  • Karma: 3
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #4 : 28.09.2007, 09:46 »
select    STOCKREF, ONHAND, ONHAND*ISNULl(PRICE,0) AS A
from    LG_001_01_GNTOTST TOTS
   LEFT JOIN LG_001_PRCLIST PRCLIST ON PRCLIST.CARDREF=TOTS.STOCKREF AND PRCLIST.PRIORITY=1 AND PRCLIST.PTYPE=1
WHERE    TOTS.INVENNO<>-1
   AND TOTS.ONHAND>0


Çevrimdışı Koray Ü.

  • Uzman Kullanıcı
  • Logo Uzmanı
  • *****
  • Karma: 8
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #5 : 29.09.2007, 10:13 »
Sayın Çiftçi,

gerçekten çok teşekkür ederim. Sorgunun sonucunu malzeme değer raporu ile kıyasladım, bire bir tutuyor... elinize, emeğinize sağlık.

yalnız, malzemenin birimini listeleyip, stok miktarı 0 olan malzemeleri de listelememesi için küçük bir ayar yapabilir miyiz?
selamlar...

« Son Düzenleme: 29.09.2007, 10:19 Gönderen: korayuc »

Çevrimdışı LsuErsoy

  • LOGO Bayi
  • Logo Uzmanı
  • *****
  • Karma: 33
  • Kişisel ileti
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #6 : 29.09.2007, 10:26 »
hazırlamış olduğunuz sorgu için teşekkürler , oldukça yararlı bir çalışma olduğunu düşünüyorum.Bende TETS ettim , başarılı

Fakat benim bir önerim olacak...ilgili sorguya Birim fiyat Döviz cinsi , YTL ise aynı fiyat , değilse ilgili satış kuru ile çarpımı sonucu YTL fiyat şeklinde sütunlar ekleyebilirseniz..bir de en son satırda GENEL toplam aldırabilirseniz çok iyi olur...

kolay gelsin , iyi çalışmalar...
« Son Düzenleme: 29.09.2007, 10:35 Gönderen: lsuersoy »

Çevrimdışı LsuErsoy

  • LOGO Bayi
  • Logo Uzmanı
  • *****
  • Karma: 33
  • Kişisel ileti
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #7 : 29.09.2007, 10:34 »
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...

Çevrimdışı S.ÖNDER

  • Yeni Kullanıcı
  • *
  • Karma: 1
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #8 : 29.09.2007, 11:20 »
Merhabalar;
Lsuersoy kardeşime  katılıyorum bence de adım adım bu kod açıklanırsa bende çok memnun olurum ,
emeğini ve bilgisini paylaşan herkese teşekkürler ,
kolay gelsin...

Çevrimdışı Koray Ü.

  • Uzman Kullanıcı
  • Logo Uzmanı
  • *****
  • Karma: 8
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #9 : 29.09.2007, 11:27 »
Eminim Sayın Çiftçi (memorphin) kurduğu mantığı açıklarken, sorguyu yazarken harcadığı emekten daha fazlasını harcayacak...

Ama böyle bir açıklama da birçok SQL meraklısının ufkunu açacaktır..

Çevrimdışı secil

  • Logo Kullanıcısı
  • **
  • Karma: 6
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #10 : 29.09.2007, 11:56 »
Böyle bir sorgu için açıklama zaman alacaktır ama mantığını öğrenmek nerden neyi çıkartabileceğimiz doğrultusunda bize örnek olacağını düşünüyorum...
                                                                  İyi Çalışmalar...

Çevrimdışı memorphin

  • LOGO Bayi
  • Logo Uzmanı
  • *****
  • Karma: 25
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #11 : 29.09.2007, 12:56 »
{oj
...
}
bu exceldeki microsoft querynin sorguyu anlaması için gerekli. o parametreler olsada olmasada vtyonet yada query analyzerde çalışır. fakat excel aktardığımda {oj gerekli oluyo.

ayrıca bu bi müşterime yazdığım sorguydu. müşterimin 5 farkı ambarı var. genel toplam, ambar1 ,,, 5 diye gidiyo. tüm abarların toplamı malzeme fiyat kartına göre çağırılıyo. kolay gelsin.

Çevrimdışı memorphin

  • LOGO Bayi
  • Logo Uzmanı
  • *****
  • Karma: 25
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #12 : 29.09.2007, 13:01 »
burada listelenen birim adettir o yüzden öyle bişi yapmadım. fakat UNISETREF alanını birimseti tablosuyla karşılaştırırsak adet'e ulaşırız.
ama bi de şu var hangi ürün adet hangi ürün paket koli çıkacak onlar belirlenmeli bence

Çevrimdışı LsuErsoy

  • LOGO Bayi
  • Logo Uzmanı
  • *****
  • Karma: 33
  • Kişisel ileti
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #13 : 29.09.2007, 13:17 »
burada listelenen birim adettir o yüzden öyle bişi yapmadım. fakat UNISETREF alanını birimseti tablosuyla karşılaştırırsak adet'e ulaşırız.
ama bi de şu var hangi ürün adet hangi ürün paket koli çıkacak onlar belirlenmeli bence

Merhabalar ; şu ana kadar yorumlarınıza yeni yorumlar yapılmadığı için tekrar devreye girmek istedim.Benim toplam istemem belirli bir mantık gerektirmiyor...yani elma ile armut da olsa en altda bir toplam görmek isterim : )

Ama stokların birim setlerine göre indexlenmesi ve Her birim setde bir ARA TOPLAM alınabilse hiç de fena olmazdı :)

yazmış olduğunuz bu kod ve ilerleyen zaman diliminde yapacağınız ayrıntılı açıklamalar için şimdiden teşekkürederim , iyi çalışmalar..

Çevrimdışı memorphin

  • LOGO Bayi
  • Logo Uzmanı
  • *****
  • Karma: 25
Ynt: SQL'de Eldeki Stok ve Fiyatlar...
« Yanıtla #14 : 29.09.2007, 14:43 »
ara toplam için excelin yeteneklerini kullanmamız lazım. ayrıca select'in sonuna yani
.....
'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,
'=TOPLA(C2:C65535)'
....
yazarak excele gelen sorgu sonucunu formul  olarakta yazdırabiliriz.