1

Konu: SELECT COUNT(*) kullanımı

Merhaba,
Bir formda hastanın eski kayıtlarının sayısını bildiren bir label'ım var. Eğer sayı 0'dan büyükse kullanıcı label'ı tıklayarak öteki kayıtları görebilecek.
Sorunum şu eski kayıtların sayısını bulmak için;

SELECT DISTINCT COUNT(*) WHERE (.....) .OR. (......) kullanmak istiyorum. Ama beceremedim. Sonucu bir değişkene nasıl atayabilirim?
COUNT FOR işime gelmiyor çünkü DISTINCT demem gerek .OR.'un her iki yanı kimi zaman aynı kayıdı verebilir, mükerrer olmaması gerek.

Teşekkürler.

2 Son düzenleyen, ugurlu2001 (03.10.2009 09:30:52)

Re: SELECT COUNT(*) kullanımı

Visual Fox Pro
LOCAL ARRAY laCount[1]  &&  Sonucu dizi elemanına alıyorsun

SELECT Cust_ID, Count(Cust_ID) ;
    FROM (_Samples+"Data\Customer") ;
    WHERE Cust_ID == "ALFKI" ;
    GROUP BY Cust_ID ;
    INTO ARRAY laCount
 
? _Tally && Kaç geçerli kayıt döndüğünü bulman için
 
*!*    yada
 
IF laCount[1] > 0 && Sonuç alındı
*!*        Yapmak istediklerin
ENDIF
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 Son düzenleyen, konuka (03.10.2009 09:42:53)

Re: SELECT COUNT(*) kullanımı

aslında sorgunun mantığını kuramadım
SELE DIST alanad ....   alanad bir tane olabilir ve dosyadakileri sadece birer kere sıralamaya yarar.

Bir hastanın (öyle diyorsun) eski kayıtları için DISTINCT kullanacaksan örneğin bir hasta aynı günde birkaç kere gelmiş olsa bile çeşitli günlerde kaç gün geldi benzeri bir sorgulama için yapılır. (Aynı günde 2 kere geldi ise 1 saysın diye)

Sorundaki şekli birden fazla hastanın geldiği gün sayısını bulmak istiyorsan:
SELECT DIST tarih, hastaad FROM hastalar WHERE hasta_id=12345 OR hasta_id=67890 INTO ARRAY kaçkayit
2 yanıt alabilirsin:
1- Myform.mylabel.Caption=STR(ALEN(kaçkayit),4,0)   && birden fazla döngüde kaçkayit a dikkat et
2- Myform.mylabel.Caption=STR (_tally,4,0)

Not: DISTINCT tarih veya DISTINCT vizit_doktorid  veya DISTINCT para hepsi olur: herhangi bir alan adı ama her döngüde sadece 1 tane

VFP9 SP2

4

Re: SELECT COUNT(*) kullanımı

Uğur PİŞTİ oldu ...

VFP9 SP2

5

Re: SELECT COUNT(*) kullanımı

Galiba öyle oldu Ali abi smile

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: SELECT COUNT(*) kullanımı

Yanıtlar için teşekkürler.
Sorgulamaının mantığı şu. Oluşturduğum proje Patoloji veritabanı. Yani hastaların çoğu tek kayıt. Ama 7-8 kez parça alınan nadir hastalar da var. En sık görülen 2 kayıtlı hastalar. Örneğin önce biopsi yapılıyor, kanser ise büyük ameliyat yapılıyor, ya da 3 yıl önce kanser tanısı konmuş şimdi nüks etmiş v.b. Hastaların her raporu için bir biopsi numarası bir de hastane prot. no var. Bildiğiniz gibi, bir hastanın hastane prot no var tek ve unique. Ama bazan prot.no boş bırakılabiliyor.
Şu anki kullandığım şekil şu:

SELECT DISTINCT BIOPSINO FROM BIOPSI WHERE (TRIM(SOYAD)+TRIM(AD) == (Thisform.soyad+Thisform.ad));
     .OR. (!EMPTY(PROTNO) .AND. TRIM(PROTNO) == Thisform.Protno) INTO ARRAY aTARA ORDER BY BIOPSINO
Thisform.Cnt_ONCESAY.Txt_SAYI.Value = _TALLY - 1  && Şu anki kayıdı sayma

Aslında yukarıdaki komut satırı ugurlu2001 arkadaşın yöntemi. Ama array ya da cursor kullanmak istemedim. Çünkü kullanıcı label'ı tıklarsa görsün, tıklamadan boşuna array oluşturmak bellek ve hız sorunu yaratır diye düşünmüştüm.

Teşekkürler...

7 Son düzenleyen, cetinbasoz (03.10.2009 13:01:47)

Re: SELECT COUNT(*) kullanımı

Kandilzade,
Bir doktor olarak belirtmeliyim ki (arti bu tip programlari eskiden yazdim hala kullanimda) hastane protokol no bos olamaz. Bos ise oyle bir kaydi kabul etme.
Hastane protokol no bos ise ve sen bunu bir biopsiNo ile iliskilendiriyorsan is bazi komedi filmlerine doner. Ayse hanimdan aldigin numune ile Ahmet beye over kanseri tanisi koyabilirsin o zaman.

Senin koduna gore protokolNo bos ise hasta adindan kime ait oldugunu cikariyorsun. O zaman soyle bana Turkiye'de "Ali Tan" gibi bir ismin tek olma olasiligi kacta kactir. Bence 0. Ben mecburi hizmetim sirasinda:

ad,soyad, ana ad, baba ad, dogum yeri, dogum tarihi, (ve hatta saati), ev adresi gibi bilgilerle bile "unique" olunamayacagini ogrendim. Ben bir kez karsilastim (gerzek ana-baba ikizlerine ayni ismi vermis) ama ben karsilastigima gore en azindan 60-70 milyonda bir olasilik demektir ki bilgisayarda kisi ayrimi icin yuksek bir olasilik.

Tabii sen butun bunlara kulak tikayabilirsin, fazla detay dusunuyor dersin ve oyle devam edersin. Programin calisir, testleri gecer ve tabii benim dusundugum ekstrem hatalar Allah'in korumasina kalir. Kusura bakma insan sagligiyla ilgili programlarda hassasiyet gerekli diye dusunuyorum.

ProtokolNo yok ise sen olustur. Ad,Soyad, ana baba ... ile erisilebilen bir liste yap. Hic olmazsa isim benzerliklerine bagli hatalari sifira yakinlastirirsin.

8

Re: SELECT COUNT(*) kullanımı

cetinbasoz yazdı:

(gerzek ana-baba ikizlerine ayni ismi vermis)

smileyikeslol
Bu nasıl olur yaw.  ikiz olduklarına göre isimleride aynı olmalı diye mi  düşünmüşler acaba. Nüfüs müdürlüğü buna nasıl izin vermiş. Siyam ikizi bile olsalar bunun olamaması lazım.

9

Re: SELECT COUNT(*) kullanımı

TC kimliknoda bile  porblem olduğunu duymuştum..

10

Re: SELECT COUNT(*) kullanımı

Çetin Bey,
Haklısınız, bizim iş hata affetmiyor. Ancak bildiğiniz gibi bize (Patolojiye) dışarıdan yani bizim hastane dışından da parça gelebiliyor. O zaman tabii prot no olmuyor. O zaman yaptığımız şey parçanın konduğu kabın üzerindeki isim ile gönderme formunun uyştuğuna bakmak. Kimi zaman da hastalar başka yerde tanı konmuş patoloji preparatlarını (lam ve parafin blok) bize getirip tanıyı doğrulamak istiyorlar. O zaman da prot no olmuyor. Aslında TC kimlik en iyisi ama tam oturmadı tabii.

İlginize teşekkürler.

11

Re: SELECT COUNT(*) kullanımı

Tamam:) Kusura bakma hassas davrandim.

Birol,
Mecburi hizmet yaptigim yerde ihtiyaclari olmadigi surece nufus cikartmak gibi bir olay yok, hatta cikarmadan bazi seylerden omur boyu yirtmalari da mumkun. Bol miktarda yaptigimiz islerden birisi de "Nufus tashihi" diye bir zimbirtiydi. Nufus cikartmiyorlar sonra bir adli olay, okul vs nedenlerle bize yas tespitinin yapilmasi icin geliyorlardi. Dagin tepesindeki bir saglik ocaginda olanaksizliklar malum. O sartlarda bazen cok uyanik olmak gerekiyor cunku kisinin yasinin 18 civarinda olmasi birilerini okka altina gonderebilecek seyler. Doktor deneyimsiz (sanki ben deneyimliydim o zaman)  ise ev uyanik olmazsa bir sucluyu kurtarip mazlumu yakabilir. O kadar olanaksizliga ragmen o tespiti saglik ocagindan isteyen ...