1

Konu: aynı anda farklı kriterlere göre count()

herkese merhaba,

pid    olay        ilgili    tarih1        devreden    devralan        tarih2
----------------------------------------------------------------------------------------------------------
1    sipariş        ali    01/01/2006
2    sipariş        ali    05/02/2006
2    devir                    ali        veli        08/05/2006
3    iade        kemal    09/06/2006
4    sipariş        hakan    15/08/2006
4    sipariş        tarkan    15/08/2006
4    devir                    hakan        ali        25/07/2006
-------------------------------------------------------------------------------------------------------------

şeklinde bir tablo var. bu tabloda, kaç adet sipariş olduğunu
select count (distinct pid) from tablo ;
where olay="sipariş"
diyerek hesaplıyorum (aynı "pid" teki siparişleri tek sipariş kabul ediyoruz) ancak her bir "ilgili"nin siparişlerini göstermek ya da saymak istediğimde
select ilgili, count(distinct pid) from tablo ;
where olay="sipariş" group by ilgili   dediğimde tabi ki sonuç yanlış oluyor. çünki örneğin pid 2'de ali'nin siparişi devredilmiş ya da pid 4'te hakan ve tarkan sipariş vermiş ama sonra hakan bunu aliye devretmiş dolayısıyla bu tabloda devireden ve deviralan ları da dikkate alarak her  bir ilgilinin verdiği siparişleri göstermek veya saymak istersek nasıl bir sorgu yazılabilir?
yardımlarınız için teşekkür ederim...

2 Son düzenleyen, cetinbasoz (06.09.2009 14:27:48)

Re: aynı anda farklı kriterlere göre count()

Burada dogru sonuc ne? ve neye gore? Yazdiklarini hic anlayamadim.

Bana tablo dizayni kotu ve icerigi mantiksiz gorundu ama sanirim yaniliyorumdur. Yapmak istedigini tam anlamadan soyle birsey yazdim:

Visual Fox Pro
Select t1.pid, t1.olay, ;

  IIF(Isnull(devreden), ilgili, devralan) As ilgili ;
  FROM ;
  (Select pid, olay, ilgili From tablo Where olay <> 'Devir') t1 ;
  left Join ;
  (Select pid, devreden, devralan From tablo Where olay == 'devir') devir ;
  on t1.pid = devir.pid And t1.ilgili == devir.devreden

3

Re: aynı anda farklı kriterlere göre count()

Çetin hocam, haklısın bayağı karışık oldu, almak istediğim sonuç şu: örneğin, ali toplam kaç tane sipariş vermiş ?
şayet ali vermiş olduğu siparişlerden bazılarını daha sonra bir başkasına devretmemiş olsa toplam kaç tane sipariş olduğunu saydırmak kolay ama devrettiğinden dolayı 
SELECT ILGILI, COUNT(DISTINCT PID) FROM TABLO ;
WHERE OLAY="sipariş" ................ GROUP BY ILGILI
noktalı yerlere mealen eğer ilgili siparişini devretmişse onu sayma ama devralanı say gibi bir koşul gerekiyor ki ben de bunu yazamıyorum. en sonda elde etmek istediğim
ali    5
veli    3

vs gibi bir tablo
teşekkür ederim...

4

Re: aynı anda farklı kriterlere göre count()

Iyi de iste benim kafamin basmadigi Ali nasil 5 olabilir, veli nasil 3 olabilir. Ayni PID'deki siparisler tek siparis ise ayni siparisi hem Hakan hem Tarkan nasil alabilir vs. Benim mantigimi asiyor. Sana verdigim kod sonucuna baktin mi?

5

Re: aynı anda farklı kriterlere göre count()

evet çetin hocam verdiğiniz kod olay ve ilgili başlıklı bir tablo oluştuyor ve ilgili kısmında önce sipariş vermiş ama sonra bunu başkasına devretmiş kişinin adını değil siparişi devralanın adını gösteriyor yani tam istediğim şekilde.
geriye saydırmak kalıyor ki sanırım o kısmı halledebilirim
ellerinize sağlık çok teşekkürler

6 Son düzenleyen, cetinbasoz (06.09.2009 15:18:23)

Re: aynı anda farklı kriterlere göre count()

Saydirmak icin onu parenteze alman yeterli:

Visual Fox Pro
select count(*) ... from ;

;
(Select t1.pid, t1.olay, ;
  IIF(Isnull(devreden), ilgili, devralan) As ilgili ;
  FROM ;
  (Select pid, olay, ilgili From tablo Where olay <> 'Devir') t1 ;
  left Join ;
  (Select pid, devreden, devralan From tablo Where olay == 'devir') devir ;
  on t1.pid = devir.pid And t1.ilgili == devir.devreden) ozetTablo ;
;
where ozetTablo.olay = "sipariş" ;
group ...