1 Son düzenleyen, Aligocmen (05.10.2009 07:48:30)

Konu: VFP Total On ve MS SQL

Arkadaşlar selam,

VFP de çalışırken şöyle bir DBF tabloda ;

Urun     Miktar   Tutar
   A             2            8
   A             6          24     
   B             4            6
   B             2            3

Total On Urun To toUrun     

Komutuyla şu tabloyu elde ediyordum.

Urun    Miktar    Tutar
   A            8           32
   B            6             9

Bu sonucu MS SQL ile nasıl elde edebilirim.

2

Re: VFP Total On ve MS SQL

Visual Fox Pro
select urun,sum(miktar) as miktar,sum(tutar) as tutar from tablo group by urun into table toplam

3

Re: VFP Total On ve MS SQL

Teşekkürler.

4 Son düzenleyen, Aligocmen (05.10.2009 10:53:09)

Re: VFP Total On ve MS SQL

Şimdi de başka bir sorunum var ve biraz karmaşıklaştı galiba.:)

Hareket adlı tabloda hem alış hemde satış kayıtları var .

Hareket Urun Miktar BirimFiyat    Tutar
Alış          A         10            2                20
Alış          A         20            2                40
Alış          B         50             1               50
Alış          C         25      4             100         
Satış         A         10            3               30
Satış         A         7              3               21
Satış         B          10            2              20
          
SELECT     hareket.hareket, hareket.urun,  SUM(hareket.miktar) AS miktar, hareket.birimfiyat, SUM(hareket.tutar) AS tutar,
                      hareket_1.hareket AS hrkt,  SUM(hareket_1.miktar) AS mkt, hareket_1.birimfiyat AS brmf, SUM(hareket_1.tutar) AS tut
FROM         hareket INNER JOIN
                      hareket AS hareket_1 ON hareket.urun = hareket_1.urun
GROUP BY hareket.urun, hareket.hareket,  hareket.birimfiyat, hareket_1.miktar, hareket_1.birimfiyat, hareket_1.tutar

Sonuçta şunu aldım ;
                                ALIŞLAR                                                        SATIŞLAR
Urun    Miktar    Birimfiyat    Tutar    mkt    brmf    tut
    A        30         2                  60    17       3                  51
    B        50         1        50    10       2                  20

C ürününün alış kaydı olmasına rağmen sonuç tablosunda listelenmedi.

Bu arada left,right, full outer join ide denedim hep aynı sonucu aldım.

not : VWdeveloper Querybuilder kullanıyorum.

5

Re: VFP Total On ve MS SQL

GROUP BY hareket.urun, hareket.hareket,  hareket.birimfiyat, hareket_1.miktar, hareket_1.birimfiyat, hareket_1.tutar

bu satirda eksik ve fazla alan var gibi
hareket_1.hareket group by a dahil edilmemisken  SUM(hareket_1.tutar) AS tut  li alan hesaplama alani oldugu halde dahil edilmis

asagidaki gibi denesen

Visual Fox Pro
SELECT     hareket.hareket, hareket.urun,  SUM(hareket.miktar) AS miktar, hareket.birimfiyat, SUM(hareket.tutar) AS tutar,

                      hareket_1.hareket AS hrkt,  SUM(hareket_1.miktar) AS mkt, hareket_1.birimfiyat AS brmf, SUM(hareket_1.tutar) AS tut
FROM         hareket INNER JOIN
                      hareket AS hareket_1 ON hareket.urun = hareket_1.urun
GROUP BY hareket.hareket, hareket.urun,hareket.birimfiyat,hareket_1.hareket,hareket_1.birimfiyat

6 Son düzenleyen, cetinbasoz (05.10.2009 11:32:17)

Re: VFP Total On ve MS SQL

SQL
SELECT  ISNULL(alislar.urun, satislar.urun) AS urun,

        alislar.miktar AS alisMiktar,
        alislar.birimFiyat AS alisFiyat,
        alislar.Tutar AS alisTutar,
        satislar.miktar AS satisMiktar,
        satislar.birimFiyat AS satisFiyat,
        satislar.Tutar AS satisTutar
FROM    ( SELECT    urun,
                    SUM(miktar) AS miktar,
                    birimFiyat,
                    SUM(tutar) AS tutar
          FROM      hareket
          WHERE     hareket = 'Alış'
          GROUP BY  urun,
                    birimfiyat
        ) alislar
        FULL JOIN ( SELECT  urun,
                            SUM(miktar) AS miktar,
                            birimFiyat,
                            SUM(tutar) AS tutar
                    FROM    hareket
                    WHERE   hareket = 'Satış'
                    GROUP BY urun,
                            birimfiyat
                  ) satislar ON alislar.urun = satislar.urun

Not: Kodu red-gate'in SQL Prompt'u ile formatladim. Tavsiye ederim.

Bu arada aslinda bence sacma bir SQL. Ne yapmak istedigini anlamadigimdan biraz attim.

7

Re: VFP Total On ve MS SQL

Selamlar;

SQL
USE TIGER

SELECT
ITEMS.LOGICALREF,
Stok_Kodu=MAX(ITEMS.CODE),
Stok_Adi=max(ITEMS.NAME),
Ay=DATEPART(MM,DATE_),
Toplam=sum(STLINE.AMOUNT),
[SatilanM]=SUM(CASE WHEN STLINE.TRCODE IN(7,8) THEN  AMOUNT when STLINE.TRCODE IN(1,2,3) THEN -1*AMOUNT ELSE 0 END)
FROM LG_099_ITEMS ITEMS
LEFT OUTER JOIN LG_099_12_STLINE STLINE ON STLINE.STOCKREF=ITEMS.LOGICALREF
GROUP BY ITEMS.LOGICALREF,DATEPART(MM,DATE_)

Group ile ilgili işlemlerde böyle kodlar kullanıyorum.  Bu sorun için uygulanabilirmi acaba?

Bilmediğin Neyse Yanıldığındır.

8

Re: VFP Total On ve MS SQL

Yok Çetin.! hiçte saçma değil  o kod tamda aradığım şeydi , subselect kullanma konusunda pek deneyimli olmadığım için zorlanıyordum. Bu kodu biraz değiştirerek istediğim sonucu aldım. Tabi verdiğin kodun nasıl çalıştığını anlayana kadar epey ter döktüm smile

Herkese zahmetlerinden dolayı teşekkür ediyorum. Bu arada SQL cümlesi şöyle oldu, içinde acaip işler yapmış olabilirm ama çalışıyor. :

SQL
SELECT     ISNULL(alislar.stokadi, alislar.stokadi) AS urun, alislar.miktar AS alisMiktar, alislar.birimfiyat AS alisFiyat,

                              alislar.tutar AS alisTutar, satislar.miktar AS satisMiktar, satislar.birimfiyat AS satisFiyat,
                              satislar.tutar AS satisTutar
FROM       (SELECT  stokadi, SUM(miktar) AS miktar, SUM(tutar) / SUM(miktar) AS birimfiyat, SUM(tutar) AS tutar
                            FROM     hareket
                           WHERE   (hareket = 'Merkez Satış') AND (carikodu = @carikodu)
                           GROUP BY stokadi) AS alislar FULL OUTER JOIN
                                    (SELECT stokadi, SUM(miktar) AS miktar, SUM(tutar) / SUM(miktar) AS birimfiyat, SUM(tutar) AS tutar
                                            FROM  hareket AS hareket_1
                                            WHERE (hareket = 'Bayi Satış') AND (bayikodu = @bayikodu)
                                            GROUP BY stokadi) AS satislar ON alislar.stokadi = satislar.stokadi

9 Son düzenleyen, cetinbasoz (05.10.2009 17:19:35)

Re: VFP Total On ve MS SQL

Ali,
Seninkine bakmadim daha. Bana sacma geldi cunku ayni urunun farkli fiyatli giris-cikislari tekrarlayacak. Eger dogruysa mesele yok.

Not: Inceleyince sozumu geri aliyorum, simdi oldu. Ortalama fiyat kullaniyorsun:)

10

Re: VFP Total On ve MS SQL

evet gerçekten tekrarlıyordu, ama birimfiyatı tutar/miktar olarak aldım ve group by clause dan çıkardım. Group by ı sadece stokadi na göre yaptım. Böylece farklı fiyatlar tekrarlamadığı gibi ağırlıklı ortalama birim fiyatınıda bulmuş oldum. 1 taşla 2 kuş smile

Teşekkürler.