1

Konu: bir sorguda nasıl halledebilirim?

lnEngineOld=Set("EngineBehavior" )
Set ENGINEBEHAVIOR 70

*------ ( 1. SORGU ) --------------------------------------------------------------------------------
Select qirs.cstkkod,qirs.cstad,;
    sum(Iif(qirs.cfistur=='C' And Month(qirs.dtar)=01 And liade=.F.,qirs.nmiktar,0)) As nocak,;
    sum(Iif(qirs.cfistur=='C' And Month(qirs.dtar)=02 And liade=.F.,qirs.nmiktar,0)) As nsubat,;
    sum(Iif(qirs.cfistur=='C' And Month(qirs.dtar)=03 And liade=.F.,qirs.nmiktar,0)) As nmart,;
    sum(Iif(qirs.cfistur=='C' And liade=.F.,qirs.nmiktar,0)) As nsattop,;
    (Sum(Iif(qirs.cfistur=='G',qirs.nmiktar,0)))-(Sum(Iif(qirs.cfistur=='C',qirs.nmiktar,0))) As nkalan;
    from qirs;
    GROUP By cstkkod Order By cstkkod Into Cursor qst

*------ ( 2. SORGU ) --------------------------------------------------------------------------------
Select qirs.cstkkod,Max    (qirs.dtar) As dsontar;
    from qirs Where qirs.cfistur=='C' And liade=.F.;
    GROUP By qirs.cstkkod Into Cursor qson

*------ ( 3. SORGU ) --------------------------------------------------------------------------------
Select qirs.cstkkod,Min(qirs.dtar) As dilktar;
    from qirs Where qirs.cfistur=='G' And liade=.F.;
    GROUP By qirs.cstkkod Into Cursor qilk

*------ ( 4. SORGU ) --------------------------------------------------------------------------------
Select qst.*,qilk.dilktar,qson.dsontar ;
    from qst;
    left Join qilk On Allt(qst.cstkkod)==Allt(qilk.cstkkod);
    left Join qson On Allt(qst.cstkkod)==Allt(qson.cstkkod);
    into Cursor qsthar

Use In (Select('qilk'))
Use In (Select('qson'))
Use In (Select('qst'))
Use In (Select('qirs'))

Set ENGINEBEHAVIOR lnEngineOld
Select('qsthar')

2

Re: bir sorguda nasıl halledebilirim?

Selam Erdal;

Kabaca aşağıdaki gibi bir şey; örnek data olmadığı için test edemedim.

Ama "türetilmiş sorgularla" Join yapıcaksan; Önce tabloları ayrı ayrı oluşturup sonra birleştirmeni tavsiye ederim. Eğer rushmore index e uygun tabloların yoksa performans konusunda "bayıltıcı" süreler görebilirsin.

Visual Fox Pro
lnEngineOld=Set("EngineBehavior" ) 

Set ENGINEBEHAVIOR 90
 
Select qst.*,qilk.dilktar,qson.dsontar ;
    FROM (Select qirs.cstkkod,qirs.cstad,;
                sum(Iif(qirs.cfistur=='C' And Month(qirs.dtar)=01 And liade=.F.,qirs.nmiktar,0)) As nocak,;
                sum(Iif(qirs.cfistur=='C' And Month(qirs.dtar)=02 And liade=.F.,qirs.nmiktar,0)) As nsubat,;
                sum(Iif(qirs.cfistur=='C' And Month(qirs.dtar)=03 And liade=.F.,qirs.nmiktar,0)) As nmart,;
                sum(Iif(qirs.cfistur=='C' And liade=.F.,qirs.nmiktar,0)) As nsattop,;
                (Sum(Iif(qirs.cfistur=='G',qirs.nmiktar,0)))-(Sum(Iif(qirs.cfistur=='C',qirs.nmiktar,0))) As nkalan;
                from qirs GROUP By cstkkod Order By cstkkod ) AS qst;
    left Join (Select qirs.cstkkod,Min(qirs.dtar) As dilktar;
                    from qirs Where qirs.cfistur=='G' And liade=.F.;
                    GROUP By qirs.cstkkod) AS qilk On Allt(qst.cstkkod)==Allt(qilk.cstkkod);
    left Join (Select qirs.cstkkod,Max    (qirs.dtar) As dsontar;
                    from qirs Where qirs.cfistur=='C' And liade=.F.;
                    GROUP By qirs.cstkkod) AS qson On Allt(qst.cstkkod)==Allt(qson.cstkkod);
                    into Cursor qsthar
 
Use In (Select('qilk'))
Use In (Select('qson'))
Use In (Select('qst'))
Use In (Select('qirs'))
Set ENGINEBEHAVIOR lnEngineOld
Select('qsthar')
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3

Re: bir sorguda nasıl halledebilirim?

uğurcum orda tablolar yok bir tane tablo var.  6 tane fielddan oluşuyor. 

CREATE CURSOR qirs(cstkkod c(15),cstad c(40),cfistur c(1),dtar d(8),liade l(1),nmiktar n(10,2)))
sorgu bu tablodan geliyor.

stok kodu grup aldırarark ay ay toplam miktar, ilk giren tarih en son çıkan tarih olucak.

yazdığın sorgu yanlış.

4

Re: bir sorguda nasıl halledebilirim?

Erdal;

En baştaki "Set Engine Behav 90"  ı ; 70 yaparsan çalışıyor ...

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

5

Re: bir sorguda nasıl halledebilirim?

erdalyalcin yazdı:

uğurcum orda tablolar yok bir tane tablo var.  6 tane fielddan oluşuyor. 

CREATE CURSOR qirs(cstkkod c(15),cstad c(40),cfistur c(1),dtar d(8),liade l(1),nmiktar n(10,2)))
sorgu bu tablodan geliyor.

stok kodu grup aldırarark ay ay toplam miktar, ilk giren tarih en son çıkan tarih olucak.

yazdığın sorgu yanlış.


Aşağıdaki oluyor mu?

Visual Fox Pro
CREATE CURSOR qirs(cstkkod c(15),cstad c(40),cfistur c(1),dtar d(8),liade l(1),nmiktar n(10,2))

 
* stok kodu grup aldırarark ay ay toplam miktar, ilk giren tarih en son çıkan tarih olucak.
SET ENGINEBEHAVIOR 90
 
SELECT DisTinct ;
        cstkkod, ;
        MIN(dtar) As IlkTarih, ;
        MAX(dtar) As SonTarih, ;
        SUM(IIF(MONTH(dTar) = 1,cstad, 0))  As AdetOcak, ;
        SUM(IIF(MONTH(dTar) = 1,nmiktar, 0))  As MiktarOcak, ;
        SUM(IIF(MONTH(dTar) = 2,cstad, 0))  As AdetSubat, ;
        SUM(IIF(MONTH(dTar) = 2,nmiktar, 0))  As MiktarSubat ;
    FROM qirs ;
    WHERE  liade=.F. ;
    GROUP BY 1
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

6

Re: bir sorguda nasıl halledebilirim?

MIN(dtar) As IlkTarih, ;
koşulu qirs.cfistur=='G'

        MAX(dtar) As SonTarih, ;

koşulu qirs.cfistur=='C'

olucak. Girişlerde çıkışlarda aynı tabloda

7

Re: bir sorguda nasıl halledebilirim?

Erdalcım, biraz örnek data olsa; birde istediğin sonuç cursor u ... Daha kolay olucak smile

Visual Fox Pro
CREATE CURSOR qirs(cstkkod c(15),cstad c(40),cfistur c(1),dtar d(8),liade l(1),nmiktar n(10,2))

 
* stok kodu grup aldırarark ay ay toplam miktar, ilk giren tarih en son çıkan tarih olucak.
 
SET ENGINEBEHAVIOR 90
 
SELECT DisTinct ;
        cstkkod, ;
        cfistur, ;
        MIN(dtar) As IlkTarih, ;
        MAX(dtar) As SonTarih, ;
        SUM(IIF(MONTH(dTar) = 1,cstad, 0))  As AdetOcak, ;
        SUM(IIF(MONTH(dTar) = 1,nmiktar, 0))  As MiktarOcak, ;
        SUM(IIF(MONTH(dTar) = 2,cstad, 0))  As AdetSubat, ;
        SUM(IIF(MONTH(dTar) = 2,nmiktar, 0))  As MiktarSubat ;
    FROM qirs ;
    WHERE  liade=.F. AND INLIST(cFistur,'G','C');
    GROUP BY 1,2
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü