1 Son düzenleyen, mrduyar (26.04.2007 09:25:31)

Konu: 3 cursor u birleştirme

selamlar
3 adet cursor um var.
4. bir cursor de bu 3 cursor deki bilgileri birleştirmek istiyorum yanlız "kod,miktar1,miktar2,miktar3" şeklinde olmasını istiyorum. Çıkan sonuçta aynı kod dan sadece 1 tane olacak.

bunu nasıl yapabilirrim.

Visual Fox Pro
CREATE CURSOR dene1 (kod c(12),ay c(2),miktar n(3))

SELECT dene1
FOR i=1 TO 10
  INSERT INTO dene1 (kod,ay,miktar) VALUES ("Kod_"+TRANSFORM(INT(rand()*10)+1,"@L ##"),TRANSFORM(INT(rand()*8)+1,"@L ##"),INT(rand()*10))
ENDFOR
CREATE CURSOR dene2 (kod c(12),ay c(2),miktar n(3))
SELECT dene2
FOR i=1 TO 10
  INSERT INTO dene2 (kod,ay,miktar) VALUES ("Kod_"+TRANSFORM(INT(rand()*10)+1,"@L ##"),TRANSFORM(INT(rand()*12)+1,"@L ##"),INT(rand()*10))
ENDFOR
CREATE CURSOR dene3 (kod c(12),ay c(2),miktar n(3))
SELECT dene3
FOR i=1 TO 10
  INSERT INTO dene3 (kod,ay,miktar) VALUES ("Kod_"+TRANSFORM(INT(rand()*10)+1,"@L ##"),TRANSFORM(INT(rand()*20)+1,"@L ##"),INT(rand()*10))
ENDFOR
Bilmediğin Neyse Yanıldığındır.

2

Re: 3 cursor u birleştirme

benzer bir soru sormuştum. Cevaplar belki işini görür

http://www.fox4um.com/viewtopic.php?id=320

3

Re: 3 cursor u birleştirme

bunu inceledim insert into gerçekten süper. Ama benim istediğim değil. Çünki dene1 de olupda dene2 de olmayan veya tam tersi kod lar var.

bu işim kısadan çözmenin yolunu arıyorum.

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

4

Re: 3 cursor u birleştirme

Umarım yeteri kadar kısadır.

Visual Fox Pro
select kod from dene1 union select kod from dene2 union  select kod from dene3 into cursor dene4

select kod, 00000 miktar1, 00000 miktar2, 00000 miktar3 from dene4 into cursor dene4 readwrite
update dene4 set miktar1=dene1.miktar from dene4, dene1 where dene4.kod=dene1.kod
update dene4 set miktar2=dene2.miktar from dene4, dene2 where dene4.kod=dene2.kod
update dene4 set miktar3=dene3.miktar from dene4, dene3 where dene4.kod=dene3.kod


mrduyar yazdı:

selamlar
3 adet cursor um var.
4. bir cursor de bu 3 cursor deki bilgileri birleştirmek istiyorum yanlız "kod,miktar1,miktar2,miktar3" şeklinde olmasını istiyorum. Çıkan sonuçta aynı kod dan sadece 1 tane olacak.

bunu nasıl yapabilirrim.

Visual Fox Pro
CREATE CURSOR dene1 (kod c(12),ay c(2),miktar n(3))

SELECT dene1
FOR i=1 TO 10
  INSERT INTO dene1 (kod,ay,miktar) VALUES ("Kod_"+TRANSFORM(INT(rand()*10)+1,"@L ##"),TRANSFORM(INT(rand()*8)+1,"@L ##"),INT(rand()*10))
ENDFOR
CREATE CURSOR dene2 (kod c(12),ay c(2),miktar n(3))
SELECT dene2
FOR i=1 TO 10
  INSERT INTO dene2 (kod,ay,miktar) VALUES ("Kod_"+TRANSFORM(INT(rand()*10)+1,"@L ##"),TRANSFORM(INT(rand()*12)+1,"@L ##"),INT(rand()*10))
ENDFOR
CREATE CURSOR dene3 (kod c(12),ay c(2),miktar n(3))
SELECT dene3
FOR i=1 TO 10
  INSERT INTO dene3 (kod,ay,miktar) VALUES ("Kod_"+TRANSFORM(INT(rand()*10)+1,"@L ##"),TRANSFORM(INT(rand()*20)+1,"@L ##"),INT(rand()*10))
ENDFOR

5 Son düzenleyen, aydın (26.04.2007 11:59:20)

Re: 3 cursor u birleştirme

sanirim full join ile çözülür...

select dene1.kod, dene1.miktar as miktar1,dene2.miktar as miktar2, dene3.miktar as miktar3;
 from   dene1;
 FULL JOIN dene2 ON dene1.kod = dene2.kod ;
 FULL JOIN dene3 ON dene1.kod = dene3.kod


yada iki kademeli olabilir... önce ddene1,dene2 biryerde birleştirilir sonra sonuç dene3 ile birleştirilir.
işin inceliği FULL JOIN kullanılması diye düşünüyorm..
yada inner join incellenmelidir..

6

Re: 3 cursor u birleştirme

aydın yazdı:

sanirim full join ile çözülür...

select dene1.kod, dene1.miktar as miktar1,dene2.miktar as miktar2, dene3.miktar as miktar3;
 from   dene1;
 FULL JOIN dene2 ON dene1.kod = dene2.kod ;
 FULL JOIN dene3 ON dene1.kod = dene3.kod


yada iki kademeli olabilir... önce ddene1,dene2 biryerde birleştirilir sonra sonuç dene3 ile birleştirilir.
işin inceliği FULL JOIN kullanılması diye düşünüyorm..
yada inner join incellenmelidir..


full join i denedim null değerler olduğu işin iif gibi komutlar kullanmak gerekiyor.

altun yazdı:

Umarım yeteri kadar kısadır.


select kod from dene1 union select kod from dene2 union  select kod from dene3 into cursor dene4
select kod, 00000 miktar1, 00000 miktar2, 00000 miktar3 from dene4 into cursor dene4 readwrite
update dene4 set miktar1=dene1.miktar from dene4, dene1 where dene4.kod=dene1.kod
update dene4 set miktar2=dene2.miktar from dene4, dene2 where dene4.kod=dene2.kod
update dene4 set miktar3=dene3.miktar from dene4, dene3 where dene4.kod=dene3.kod


from sanırım doğru yerde değil sanırım.
update dene4 set miktar1=dene1.miktar where dene4.kod=dene1.kod

şeklinde yaptığımdada istediğim sonuç a ulaşamıyorum.

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

7 Son düzenleyen, foxman (26.04.2007 13:44:54)

Re: 3 cursor u birleştirme

Sanırım bu işini görür.
Q2 kod ve ay'a göre, Q3 sadece kod'a göre gruplu. Hangisi lazımsa onu kullanırsın.

Visual Fox Pro
********************************

SELECT kod,ay,miktar as miktar1,0 as miktar2,0 as miktar3 FROM dene1 ;
UNION ;
SELECT kod,ay,0 as miktar1,miktar as miktar2,0 as miktar3 FROM dene2 ;
UNION ;
SELECT kod,ay,0 as miktar1,0 as miktar2,miktar as miktar3 FROM dene3 ;
INTO CURSOR q1
********************************
SELECT kod,ay, ;
    SUM(miktar1) as miktar1, ;
    SUM(miktar2) as miktar2, ;
    SUM(miktar3) as miktar3 ;
FROM q1 ;
GROUP BY 1,2 ;
INTO CURSOR q2
********************************
SELECT kod, ;
    SUM(miktar1) as miktar1, ;
    SUM(miktar2) as miktar2, ;
    SUM(miktar3) as miktar3 ;
FROM q1 ;
GROUP BY 1 ;
INTO CURSOR q3
********************************

8

Re: 3 cursor u birleştirme

Visual Fox Pro
SELECT kod,ay, ;

  SUM(miktar1) as miktar1, ;
  SUM(miktar2) as miktar2, ;
  SUM(miktar3) as miktar3 ;
FROM q1 ;
GROUP BY 1,2 ;
INTO CURSOR q2

yerine

Visual Fox Pro
SELECT kod,ay, ;

  SUM(miktar1) as miktar1, ;
  SUM(miktar2) as miktar2, ;
  SUM(miktar3) as miktar3 ;
FROM q1 ;
GROUP BY 1 ;
INTO CURSOR q2

işimi gördü. Çok teşekkürler herkese
Ay ile ilgli bir işleme gerek yok.
Ama toplama yaptığı için işimi gördü.  Normal şartlarda ben toplatma işlemi yaptırmak itemiyorum. peki diyeceksiniz aynı kod dan 2 den fazla varsa!  Ama yok. örnekte random olduğu için geliyor.

çok oluyorum biliyorum. son bir istek.
toplatma işlemini tapmadan bunu yapmak mümkün değilmi? cetin abi nerelerdesin:P

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

9 Son düzenleyen, foxman (26.04.2007 16:14:56)

Re: 3 cursor u birleştirme

Ben kod, miktar falan görünce herhalde toplama yaptırmak istiyorsun diye düşündüm.

Ama toplama yaptırmayacaksan ve kodlar unique ise gönderdiğim kodun ilk kısmının işini görmesi lazım.

Visual Fox Pro
SELECT kod,ay,miktar as miktar1,0 as miktar2,0 as miktar3 FROM dene1 ;

UNION ;
SELECT kod,ay,0 as miktar1,miktar as miktar2,0 as miktar3 FROM dene2 ;
UNION ;
SELECT kod,ay,0 as miktar1,0 as miktar2,miktar as miktar3 FROM dene3 ;
INTO CURSOR q1

10

Re: 3 cursor u birleştirme

erdalyalcin ın verdiği linkteli tarkan'ın union lu örneği senin işini tek komutta görür. miktarları da tek field altında toplarsın.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com