1 Son düzenleyen, avrasya34 (10.12.2010 21:34:32)

Konu: select komutu

Tum arkadaşlara şimdiden teşekkürler

        SELECT ilaclar , SUM(miktar)as miktar,no1,genno,no FROM hstgel;
            group BY 1,3,4,5;
            into CURSOR hst1
            SELECT * fROM hst1 ;
            INNER JOIN  ilaclar ;
            ON hst1.ilaclar =ilaclar.ilaclar ;
            INTO CURSOR hst11


bu kod sorunsuz çalışıyor. ama benim istediğim

Visual Fox Pro
SELECT TARIH,ilaclar , SUM(miktar)as miktar,no1,genno,no FROM hstgel;

            group BY 1,3,4,5;
            into CURSOR hst1
            SELECT * fROM hst1 ;
            INNER JOIN  ilaclar ;
            ON hst1.ilaclar =ilaclar.ilaclar ;
            INTO CURSOR hst11


GİBİ BİR KOD bu komut hata veriyor çunkü hst1 den gelen kayıtların içinde aynı isimde pek çok kayıt var.

yapmak istediğim hst1 deki ilaçların fiyatlarını ilaçlar dosyasından alabilmek bunun select komutuyla imkanı varmı acaba yoksa döngüyle mi halletmem gerekiyor.

herkese tekrar teşekkürler

2 Son düzenleyen, ugurlu2001 (11.12.2010 11:46:15)

Re: select komutu

Avrasya; önce biraz data kopyalasaydın keşke. forumda bir çk kez konusu geçti. böylece istediğin SQL i daha kolay yapabiliriz smile

Söylediğin SQL, anladığım doğru ise çok kolay gibi, DISTINC kullanıp bazı fieldları kaldırırsan istediğin sonucu alabilirsin sanki :

Visual Fox Pro
SELECT Distinct ;

        ilaclar, ;
        SUM(miktar)as miktar, ;
        no1, ;
        genno, ;
        no ;
    FROM hstgel;
    LEFT JOIN ilaclar ON hstgel.ilaclar == ilaclar.ilaclar
    GROUP BY 1,3,4,5;
    Order By ilaclar
    INTO CURSOR hst1
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: select komutu

uğur hocam ilaçların Distinct olmaması gerekiyor. çünkü hst1 de sadece tarih Distinct olabilir. farklı günlerde aynı ilaç uygulanıyor ve ben bunu günlük olarak kaydetmem gerekiyor

4

Re: select komutu

örnek data burda
sonuç olarak istediğim cursor tarih,genno,no,bfiyat,miktar,tutar colonlarını içermeli

***********
CreateCursor_t1()
CreateCursor_ilaclar()


Procedure CreateCursor_t1
LOCAL lcData, lcTemp
lcTemp = SYS(2015)+'.tmp'
TEXT TO m.lcData noshow
07/09/2004,"Ketalar enj. flk.",5.0,1,959,959
07/09/2004,"Rompun enj. flk.",5.0,1,959,959
01/21/2005,"LAVMAN",1.0,2,959,959
01/21/2005,"Laksofenol",1.0,2,959,959
01/21/2005,"Libalax 10 gr supr.",1.0,2,959,959
01/21/2005,"Sabun",1.0,2,959,959
01/23/2005,"% 5 Dextroz",1.0,3,959,959
01/23/2005,"Borgal enj. flk.",1.0,3,959,959
01/23/2005,"Canoural damla",1.0,3,959,959
01/23/2005,"Depopromine flk.",1.0,3,959,959
03/19/2005,"Cefazol 500 im.",1.0,4,959,959
03/19/2005,"Metabolas enj.flk.",1.0,4,959,959
03/19/2005,"Prednisolon amp.",1.0,4,959,959
03/19/2005,"Synulox tb",20.0,4,959,959
03/19/2005,"Ultracorn amp.",1.0,4,959,959
08/09/2005,"Borgal enj. flk.",3.0,5,959,959
08/09/2005,"Caniverm 700 mg.",5.0,5,959,959
01/23/2006,"Baytril -k % 5 enj.flk",5.0,6,959,959
01/23/2006,"Depo medrol flk",1.0,6,959,959
01/23/2006,"Eye Drop",1.0,6,959,959
01/23/2006,"Genta gutte",2.0,6,959,959
01/23/2006,"Onadrone gute",2.0,6,959,959
05/23/2006,"Perlutex tb.",5.0,7,959,959
06/06/2006,"Ketalar enj. flk.",0.0,8,959,959
06/06/2006,"Rompun enj. flk.",0.0,8,959,959
09/26/2009,"%5 Dextroz",2.0,7,959,959
09/26/2009,"2 cc Enjektör",1.0,7,959,959
09/26/2009,"AD3 sol  enj. flk",1.0,7,959,959
09/26/2009,"Agumentin susp.",1.0,7,959,959
09/26/2009,"BANDAJ",1.0,7,959,959
09/26/2009,"Baypamun",1.0,7,959,959
09/26/2009,"Perlutex tb.",2.0,7,959,959
09/26/2009,"Ödeme",-686.0,7,959,959
09/26/2009,"İDRAR TAHLİLİ",1.0,7,959,959
09/26/2009,"İeciline 400",1.0,7,959,959
10/03/2009,"% 5 Dextroz",15.0,3,959,959
10/03/2009,"Anjiocat",1.0,1,959,959
10/03/2009,"Caniverm 700 Mg.",1.0,1,959,959
10/03/2009,"Depopromine flk.",15.0,3,959,959

ENDTEXT

STRTOFILE(m.lcData,m.lcTemp)

create CURSOR t1 ;
( ;
  TARIH D(8,0)  NULL  ;
  ,ILACLAR C(25,0)  NOT  NULL  ;
  ,MIKTAR N(16,1)  NOT  NULL  ;
  ,NO1 N(10,0)  NOT  NULL  ;
  ,GENNO N(10,0)  NOT  NULL  ;
  ,NO N(10,0)  NOT  NULL  ;
  )

APPEND FROM (m.lcTemp) TYPE delimited
ERASE (m.lcTemp)
endproc

Procedure CreateCursor_ilaclar
LOCAL lcData, lcTemp
lcTemp = SYS(2015)+'.tmp'
TEXT TO m.lcData noshow
"% 5 Dextroz",-83.60,0.350,"İlaç"
"AD3 sol  enj. flk",-19.00,10.000,"İlaç"
"Agumentin susp.",-17.00,35.000,"İlaç"
"Agumentine tb",-23.00,35.000,"İlaç"
"Alfamine enj. flk.",-57.80,50.000,"İlaç"
"Alfapred forte",-17.50,45.360,"İlaç"
"Alfazine enj. flk.",-33.30,50.000,"İlaç"
"Alfoxil 250 mg susp.",0.00,0.000,"İlaç"
"Alfoxil 250 mg. tb",0.00,0.000,"İlaç"
"Alfoxil 500 mg. tb",0.00,0.000,"İlaç"
"Aminocardol amp",0.00,45.000,"İlaç"
"Amoksina  250 mg. cap.",0.00,10.000,"İlaç"
"Ampisit",1.00,10.000,"İlaç"

ENDTEXT

STRTOFILE(m.lcData,m.lcTemp)

create CURSOR ilaclar ;
( ;
  ILACLAR C(25,0)  NOT  NULL  ;
  ,DOZ N(10,2)  NOT  NULL  ;
  ,BFIYAT N(10,3)  NOT  NULL  ;
  ,GURUP C(20,0)  NOT  NULL  ;
  )

APPEND FROM (m.lcTemp) TYPE delimited
ERASE (m.lcTemp)
endproc

5

Re: select komutu

Hatanin nedeni group by satiri:

group BY 1,2, 4,5,6;

Ancak ne yapmak istedigini hic anlamadim.

6 Son düzenleyen, avrasya34 (11.12.2010 22:56:22)

Re: select komutu

hocem kısaca şöyle anlatayım ;

Visual Fox Pro
SELECT TARIH,ilaclar , SUM(miktar)as miktar,no1,genno,no FROM hstgel;

            group BY 1,2,4,5,6;
            into CURSOR hst1


bu komutla aldığım verilerde ilaçlar colonundaki ilaçlarla ilaclar dosyasında bulunan ilaclar colonunu eşleştirmek ve fatura yapmak istiyorum.

Visual Fox Pro
SELECT ilaclar , SUM(miktar)as miktar,no1,genno,no FROM hstgel;

            group BY 1,3,4,5;
            into CURSOR hst1
            SELECT * fROM hst1 ;
            INNER JOIN  ilaclar ;
            ON hst1.ilaclar =ilaclar.ilaclar ;
            INTO CURSOR hst11

Bu komut çalışıyor çünkü oluşan kursorda ilaclar bölümünde ilaç tekrarı yok.


Visual Fox Pro
SELECT tarih, ilaclar , SUM(miktar)as miktar,no1,genno,no FROM hstgel;

            group BY 1,2,4,5,6;
            into CURSOR hst1
            SELECT * fROM hst1 ;
            INNER JOIN  ilaclar ;
            ON hst1.ilaclar =ilaclar.ilaclar ;
            INTO CURSOR hst11


kodu çalışmıyor çünkü ilaçlar kolonunda tekrar eden kayıtlar var.

1. dosyada
genno
no
no1
tarih
ilaclar
miktar
2. dosyada
ilaclar
bfiyat   var

elde etmek istediğim cursor
genno
no
tarih
ilaclar
bfiyat
bfiyat*miktar tutar
cursorun oluşma şartı 1.dosyadaki ilacların 2. dosyadaki ilaçlarla eşleşmesi ve hemen yanına birim fiyatının gelmesi

7 Son düzenleyen, ugurlu2001 (14.12.2010 15:09:30)

Re: select komutu

Avrasya, doğru anladıysam; "CrsDogrumu" istediğin gibi bir şey; hatalı düşündüğün şey tarih fieldını buraya ekleyip toplam alınacak satırları ona rağmen gruplamak istemen. Dolayısı ile aynı ilaçtan 2 farklı satır görmen normal.  Çünkü birden fazla tarihte işlem var, ve gruplamanı ona göre yapıyorsun. Ben tarih değeri için hangisini kullanacağını bilemediğim için MIN ve MAX değerlerinin ikisinide aldım. Umarım doğru anlayıp yardımcı olabilmişimdir.


Visual Fox Pro
m.lcOldSetDate = SET("Date")

Set Date to American
CreateCursor_t1()
CreateCursor_ilaclar()
 
SELECT ;
        T1.Genno, ;
        T1.No, ;
        T1.Tarih, ;
        il.ilaclar, ;
        il.bfiyat, ;
        il.bfiyat * T1.miktar as Tutar ;
    FROM T1 ;
    INNER JOIN ilaclar as il ON T1.ilaclar == il.ilaclar  ;
    ORDER BY il.ilaclar, T1.Tarih ;
    INTO CURSOR crsHatali
 
BROWSE     
 
 
SELECT ;
        T1.Genno, ;
        T1.No, ;
        il.ilaclar, ;
        MIN(Tarih) As TarihMin, ;
        MAX(Tarih) As TarihMax, ;
        il.bfiyat As BFiyat, ;
        SUM(Miktar) as Miktar, ;
        SUM(il.bfiyat * T1.miktar) as Tutar ;
    FROM T1 ;
    INNER JOIN ilaclar as il ON T1.ilaclar == il.ilaclar  ;
    GROUP BY 1,2,3,6 ;
    ORDER BY il.ilaclar  ;
    INTO CURSOR crsDogruMu
 
BROWSE     
 
Set Date To &lcOldSetDate
 
 
Procedure CreateCursor_t1
LOCAL lcData, lcTemp
lcTemp = SYS(2015)+'.tmp'
TEXT TO m.lcData noshow
07/09/2004,"Ketalar enj. flk.",5.0,1,959,959
07/09/2004,"Rompun enj. flk.",5.0,1,959,959
01/21/2005,"LAVMAN",1.0,2,959,959
01/21/2005,"Laksofenol",1.0,2,959,959
01/21/2005,"Libalax 10 gr supr.",1.0,2,959,959
01/21/2005,"Sabun",1.0,2,959,959
01/23/2005,"% 5 Dextroz",1.0,3,959,959
01/23/2005,"Borgal enj. flk.",1.0,3,959,959
01/23/2005,"Canoural damla",1.0,3,959,959
01/23/2005,"Depopromine flk.",1.0,3,959,959
03/19/2005,"Cefazol 500 im.",1.0,4,959,959
03/19/2005,"Metabolas enj.flk.",1.0,4,959,959
03/19/2005,"Prednisolon amp.",1.0,4,959,959
03/19/2005,"Synulox tb",20.0,4,959,959
03/19/2005,"Ultracorn amp.",1.0,4,959,959
08/09/2005,"Borgal enj. flk.",3.0,5,959,959
08/09/2005,"Caniverm 700 mg.",5.0,5,959,959
01/23/2006,"Baytril -k % 5 enj.flk",5.0,6,959,959
01/23/2006,"Depo medrol flk",1.0,6,959,959
01/23/2006,"Eye Drop",1.0,6,959,959
01/23/2006,"Genta gutte",2.0,6,959,959
01/23/2006,"Onadrone gute",2.0,6,959,959
05/23/2006,"Perlutex tb.",5.0,7,959,959
06/06/2006,"Ketalar enj. flk.",0.0,8,959,959
06/06/2006,"Rompun enj. flk.",0.0,8,959,959
09/26/2009,"%5 Dextroz",2.0,7,959,959
09/26/2009,"2 cc Enjektör",1.0,7,959,959
09/26/2009,"AD3 sol  enj. flk",1.0,7,959,959
09/26/2009,"Agumentin susp.",1.0,7,959,959
09/26/2009,"BANDAJ",1.0,7,959,959
09/26/2009,"Baypamun",1.0,7,959,959
09/26/2009,"Perlutex tb.",2.0,7,959,959
09/26/2009,"Ödeme",-686.0,7,959,959
09/26/2009,"İDRAR TAHLİLİ",1.0,7,959,959
09/26/2009,"İeciline 400",1.0,7,959,959
10/03/2009,"% 5 Dextroz",15.0,3,959,959
10/03/2009,"Anjiocat",1.0,1,959,959
10/03/2009,"Caniverm 700 Mg.",1.0,1,959,959
10/03/2009,"Depopromine flk.",15.0,3,959,959
 
ENDTEXT
 
STRTOFILE(m.lcData,m.lcTemp)
 
create CURSOR t1 ;
( ;
  TARIH D(8,0)  NULL  ;
  ,ILACLAR C(25,0)  NOT  NULL  ;
  ,MIKTAR N(16,1)  NOT  NULL  ;
  ,NO1 N(10,0)  NOT  NULL  ;
  ,GENNO N(10,0)  NOT  NULL  ;
  ,NO N(10,0)  NOT  NULL  ;
  )
 
APPEND FROM (m.lcTemp) TYPE delimited
ERASE (m.lcTemp)
endproc
 
Procedure CreateCursor_ilaclar
LOCAL lcData, lcTemp
lcTemp = SYS(2015)+'.tmp'
TEXT TO m.lcData noshow
"% 5 Dextroz",-83.60,0.350,"İlaç"
"AD3 sol  enj. flk",-19.00,10.000,"İlaç"
"Agumentin susp.",-17.00,35.000,"İlaç"
"Agumentine tb",-23.00,35.000,"İlaç"
"Alfamine enj. flk.",-57.80,50.000,"İlaç"
"Alfapred forte",-17.50,45.360,"İlaç"
"Alfazine enj. flk.",-33.30,50.000,"İlaç"
"Alfoxil 250 mg susp.",0.00,0.000,"İlaç"
"Alfoxil 250 mg. tb",0.00,0.000,"İlaç"
"Alfoxil 500 mg. tb",0.00,0.000,"İlaç"
"Aminocardol amp",0.00,45.000,"İlaç"
"Amoksina  250 mg. cap.",0.00,10.000,"İlaç"
"Ampisit",1.00,10.000,"İlaç"
 
ENDTEXT
 
STRTOFILE(m.lcData,m.lcTemp)
 
create CURSOR ilaclar ;
( ;
  ILACLAR C(25,0)  NOT  NULL  ;
  ,DOZ N(10,2)  NOT  NULL  ;
  ,BFIYAT N(10,3)  NOT  NULL  ;
  ,GURUP C(20,0)  NOT  NULL  ;
  )
 
APPEND FROM (m.lcTemp) TYPE delimited
ERASE (m.lcTemp)
endproc
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ü

8

Re: select komutu

Bern gene anlamadim.

9

Re: select komutu

cetinbasoz yazdı:

Hatanin nedeni group by satiri:

group BY 1,2, 4,5,6;

Ancak ne yapmak istedigini hic anlamadim.


Üstat, dediğin gibi sorun Group By kısmında.

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ü

10

Re: select komutu

Visual Fox Pro
SELECT ;

        T1.Genno, ;
        T1.No, ;
        il.ilaclar, ;
        MIN(Tarih) As TarihMin, ;
        MAX(Tarih) As TarihMax, ;
        il.bfiyat As BFiyat, ;
        SUM(Miktar) as Miktar, ;
        SUM(il.bfiyat * T1.miktar) as Tutar ;
    FROM T1 ;
    INNER JOIN ilaclar as il ON T1.ilaclar == il.ilaclar  ;
    GROUP BY 1,2,3,6 ;
    ORDER BY il.ilaclar  ;
    INTO CURSOR crsDogruMu


aradığım buydu sağol uğur kardeşim.

arkadaşlar hepinize teşekkürler.

11 Son düzenleyen, ugurlu2001 (14.12.2010 12:09:00)

Re: select komutu

Avrasya, inan SQL i yazmak değilde, ne istediğini anlamak zor geldi.

Data olunca her şey biraz daha kolaylaşıyor.

İşinin görülmesine sevindim smile

Not, ekleme :
SQL yazıyorken

Visual Fox Pro
Group By

yada

Visual Fox Pro
Order By

tümcelerinde 1,2,3 gibi kısaltmalar yerine kesinlikle FIELD ADLARINI kullanmanı tavsiye ederim. İleride SQL de bir ekleme / düzeltme yaptığında sorun yaşamamayı garantilemiş olursun. sonrasında bir hayli baş ağrıtabiliyor.

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ü

12 Son düzenleyen, neyzen (04.02.2011 16:56:27)

Re: select komutu

Merhaba dostlar, Sql ile cursorde oluşturulmuş bir ana tablom var ismi tablo1 ,bunu veritabanımdaki sinif tablosu ile sınıf kodundan Left JOIN ile birleştirmek istiyorum

SELECT TABLO1.N1 ,TABLO1.AD,SINIF.ACIKLAMA FROM TABLO1,SINIF;
                    TABLO1 LEFT JOIN SINIF ON  TABLO1.MAGKOD = SINIF.SINIF INTO CURSOR SONUC   

şeklinde join yaptıktan sonra ,AÇIKLAMA fieldinde eşleşmeyen kayıtlara   .NULL. değerleri dönüyor,bu da listelerde çok çirkin görünüyor.Bunu nasıl engellerim ? Aslında boşluk olan o bilgi neden NULL olarak dönüyor ? Boşluksa Boşluk dönmesi gerekir.Şimdiden teşekkür ederim big_smile

En büyük sermaye nakit,nakit sermaye vakittir...

13

Re: select komutu

Visual Fox Pro
SELECT TABLO1.N1 ,TABLO1.AD,NVL(SINIF.ACIKLAMA,'') as aciklama FROM TABLO1,SINIF;

                    TABLO1 LEFT JOIN SINIF ON  TABLO1.MAGKOD = SINIF.SINIF INTO CURSOR SONUC

14

Re: select komutu

Neyzen,
Oncelikle SQL'in garip geldi, sanirim aslini vermiyorsun, buraya yazarken yazim hatasi olmus. Ikincisi, eger o sonucun tek derdi gorsel ise:

Visual Fox Pro
Set NullDisplay to ""

en basit ve efektif cozum. Gercekten NULL yerine bos gelmesini istiyorsan o zaman NVL() kullan ama dikkatli kullan ve alani Cast() et:

Visual Fox Pro
..,Cast( NVL( Sinif.Aciklama, '') as M ) as Aciklama ...

gibi.

15

Re: select komutu

Çetin hocam,  Set NullDisplay to ""  işimi gördü.SQL in aslını verdim hocam,biraz doğaçlama yazdığımdan aklıma o an ne geliyorsa tablolara o isimi veriyorum  :-)  programda aynen size gönderdiğim gibi kodlar.çalışıyor şu an sağ olun varolun teşekkürler fox dostları big_smile

En büyük sermaye nakit,nakit sermaye vakittir...