Distinct kullanımı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Distinct kullanımı

Mesaj gönderen bobasturk »

Merhaba,

Kod: Tümünü seç

SELECT BUROEKIP ,COUNT(BUROEKIP) as toplam
FROM OLAYRAPOR OY, OLAYUZMAN OU  
WHERE OY.INCTARIHI
BETWEEN :TARIH1 AND :TARIH2 AND  OY.OLAYSONUC='OLAY TESPİT' 
GROUP BY BUROEKIP
bu şekilde bir sorgulamam var. OLAYRAPOR ana tablomda bulunan tarih ve sonuc kıstasına göre uzman tablomdaki verileri saymam ve grid içerisine almam gerekiyor. yukarıdaki kod çalışıyor fakat ben aynı aynı kayıtları saymasının istemiyorum fakat aynı koda distinct uyguladığımda sonuç değişmiyor tümünü sayıyor. UZMAN tablom detail tablo.

konu şöyle, ana tablomda kayıtlarda sonuc olarak "tespit" yazan kayıtlar var. bu ana tabloda tespit yazan ve ona bağlı olan uzman detail tablodaki ekip kodlarını toplatmak istiyorum. ama aynı kayıt varsa bir kere saysın.

delphi7 ve firebird kullanıyorum. sanırım count ve distinct beraber kullanma sorunu yaşıyorum.

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: Distinct kullanımı

Mesaj gönderen bobasturk »

Kod: Tümünü seç

SELECT DISTINCT BUROEKIP ,COUNT(BUROEKIP) as toplam
FROM OLAYRAPOR OY, OLAYUZMAN OU  
WHERE OY.INCTARIHI
BETWEEN :TARIH1 AND :TARIH2 AND  OY.OLAYSONUC='OLAY TESPİT'  AND OY.RAPORID=OU.RAPORID
GROUP BY BUROEKIP
yukarıdaki gibi de kullansam sonuç değişmiyor. detail de bulunan kayıtların tümünü sayıyor. aynı isimde olsa da. bir yanlışım var ama nerede?

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Distinct kullanımı

Mesaj gönderen conari »

substring bu şekilde belki desteklemiyor olabilir.

Inner Join kullanarak bir deneyin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: Distinct kullanımı

Mesaj gönderen bobasturk »

Merhaba,

Ustam önerin doğrultusunda

Kod: Tümünü seç

SELECT DISTINCT OLAYUZMAN.BUROEKIP, COUNT(OLAYUZMAN.BUROEKIP) as toplam
FROM OLAYRAPOR INNER JOIN OLAYUZMAN ON OLAYRAPOR.RAPORID=OLAYUZMAN.RAPORID
WHERE OLAYRAPOR.INCTARIHI
BETWEEN :TARIH1 AND :TARIH2 AND  OLAYRAPOR.OLAYSONUC='OLAY TESPİT' 
GROUP BY OLAYUZMAN.BUROEKIP
şeklinde denedim ama yine sonuç aynı tüm detail kayıtları sayıyor.

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Re: Distinct kullanımı

Mesaj gönderen ofenX »

Merhaba,
Verdiğiniz kod ibexpert te düzgün çalışıyordu. Ya da sizin almak istediğiniz ile benim aldığım şey farklı. Bir iki örnek veri vererek: "Şunları giriyorum sonuçta şöyle bir şey istiyorum." şeklinde yazarsanız biz de deneme imkanı buluruz.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Re: Distinct kullanımı

Mesaj gönderen bobasturk »

merhaba,

OLAYRAPOR adlı ana tablomda tarihleri ve OLAYSONUC alanında OLAY TESPİT şeklinde girilen verileri tutuyorum. Detail tablomda ise olayı inceleyen ekip görevlileri var bu görevli ve ekip sayısına detail tabloda sınır yok her memurun isim ve bilgi satırına ekip kodu 9915 gibi bir kod yazılıyor otomatik. yapmak istediğim memurun olay tespit başarısını bulmak tan ziyade ekibin olay tespit sayısını bulmak bu sebeple tekrarlı kayıtları saymaması gerekiyor. where şartına uygun ana tabloya bağlı detail tabloda 9915 ekibinden 5 kişi, 9916 ekibinden 3 kişi yazılı ise bunları 9915 ekibin olay tespit başarısını 5, 9916 ekbin olay tespit sayısını 3 olarak saymasın. 9915=1 9916=1 olarak sayması gerekiyor. bu tekrarlı kayıtları saymasını önlemek için DISTICNT metodunu kullandım ama yemedi tüm personeli sayıyor.

teşekkür ve saygı ile
kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
ofenX
Üye
Mesajlar: 397
Kayıt: 09 Nis 2005 10:24
Konum: Diyarbakır
İletişim:

Re: Distinct kullanımı

Mesaj gönderen ofenX »

Merhaba,
Aşağıdaki şekilde bir deneyebilir misiniz?
Bir stored procedure ile alacağız Stored procedure aşağıdaki gibidir.

Kod: Tümünü seç

CREATE PROCEDURE BUROSAY (
    GONDERILEN VARCHAR(40),
    TAR1 DATE,
    TAR2 DATE)
RETURNS (
    EKIPADI VARCHAR(40),
    EKIPSAYISI INTEGER)
AS
begin

 FOR
SELECT  BUROEKIP,RAPORID
   FROM  olayuzman

  where buroekip=:gonderilen AND RAPORID in (SELECT RAPORID FROM olayrapor WHERE
     INCTARIHI BETWEEN :TAR1 AND :TAR2 AND OLAYSONUC='OLAY TESPİT')

GROUP BY BUROEKIP,RAPORID
  INTO :ekipadi,:ekipsayisi
 DO
BEGIN


  suspend;
  END
end
^

SET TERM ; ^

Yukarıdaki kod size tam uymayacaktır. Çünkü GONDERILEN parametresi varchar sizde integer görünüyor. Bunu ibexpertte denedikten sonra kendinize uyarlarsınız.
Belki daha kısa bir yolu vardır. Şimdilik bu şekilde idare edin.
Kullanımı ise :

Kod: Tümünü seç

SELECT DISTINCT OLAYUZMAN.BUROEKIP, (SELECT  count (*) FROM BUROSAY(OLAYUZMAN.BUROEKIP,:TARIH1,:TARIH2) ) AS  toplam

FROM OLAYRAPOR ,OLAYUZMAN
şeklinde kullanırsanız. Hiç olay çözmemiş ekip de listelenir ama karşısında 0 olur.

Kod: Tümünü seç

SELECT DISTINCT OLAYUZMAN.BUROEKIP, (SELECT  count (*) FROM BUROSAY(OLAYUZMAN.BUROEKIP,:TARIH1,:TARIH2) ) AS  toplam

FROM OLAYRAPOR INNER JOIN OLAYUZMAN ON OLAYRAPOR.RAPORID=OLAYUZMAN.RAPORID
WHERE OLAYRAPOR.INCTARIHI
BETWEEN :TARIH1 AND :TARIH2 AND  OLAYRAPOR.OLAYSONUC='OLAY TESPİT'
şeklinde kullanırsanız şartınızı sağlayan ekip isimleri ve çözdükleri olay sayısı görünür.

Kolay gelsin.
http://www.aysbergbilgisayar.com
Logo Go özel eğitim, web tasarım, teknik servis
Cevapla