Gruplandırmada sayma işlemi yapmıyor...

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
sword
Üye
Mesajlar: 18
Kayıt: 31 Ara 2004 01:48

Gruplandırmada sayma işlemi yapmıyor...

Mesaj gönderen sword »

MDRLK........... MRK ..........ATIP
-------------------------------------------------
Alm............. ..Alk.............. D4
Alm................slk...............D4
Alm................slk...............D4
Alm................slk...............D5
............................................
..........................................
................................................
...........................................
Glc.................hrm............D4
Glc.................mhy............D3
Glc.................mhy............D3
.................................... ...
................................................



Bu şekilde verilerimin bulunduğu tablom(Dbase) var..

Bu tablodaki MDRLK ve MRK göre ATIP sayılarını görmek istiyorum...

MDRLK.......... MRK.......... D3.............. D4............. D5
----------------------------------------------------------------------
Alm............... slk............ 0..................2.................1
..... ........................................................................
....................................................................................

gibi... ve şu sql i yazıyorum...

Select T.Mdrlk,T.mrk,
(Select count(*) from tablo as T1 where T1.atip='D3' and T1.mrk=T.mrk) as D3,
(Select count(*) from tablo as T1 where T1.atip='D4' and T1.mrk=T.mrk) as D4,
(Select count(*) from tablo as T1 where T1.atip='D5' and T1.mrk=T.mrk) as D5
from tablo as T
group by T.mdrlk,T.mrk


kod mantıklı geliyor fakat atip değerlerini saymıyor..sıfır değeri veriyor..

MDRLK.......... MRK.......... D3.............. D4............. D5
----------------------------------------------------------------------
Alm............... slk............ 0..................0.................0
..... ................................0..................0.................0...
.......................................0..................0.................0..........

nerde hata yapıyorum acaba? veya dbase den mi kaynaklanıyor?
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Group by'ı kaldırın, çünkü grup kullanmıyorsunuz SUBQUERY kurmuşsunuz.

Bir de öyle deneyin

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
sword
Üye
Mesajlar: 18
Kayıt: 31 Ara 2004 01:48

Mesaj gönderen sword »

Kuri_TLJ yazdı:Selamlar,

Group by'ı kaldırın, çünkü grup kullanmıyorsunuz SUBQUERY kurmuşsunuz.

Bir de öyle deneyin

Kolay Gelsin
Merkezlere makina(D3,D4 v.b) girişler birden fazla olduğu için group by kullanmayınca aynı merkez alt alta giriş sayısı kadar sıralanıyor fakat makina sayı alanları yine sıfır(0)..
kolay gelsin
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Eksik anlatmışım :) Pardon.

Müdürlüklerin tanımlı olduğu tabloyu esas alacaksınız.

Yani

Kod: Tümünü seç


TANIMLAR

KOD  AD
001  ADNAN
002  DİLEK
003  DİLAN
004  DERYA


HAREKETLER

KOD  MIKTAR
001    50
001    10
002    40
002    60
003    20
003    70
004    40
004    50

Şeklinde olduğunu düşünelim

Kod: Tümünü seç

SELECT A.KOD, A.ADI 
  (SELECT B.MIKTAR FROM HAREKETLER B WHERE A.KOD = B.KOD) TOPLAM
FROM TANIMLAR
gibi kullanırsanız işinizi görecektir veya hareket table'ına distinct query çekerseniz işiniz görülecektir, ancak distinct query yavaşlatır.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
sword
Üye
Mesajlar: 18
Kayıt: 31 Ara 2004 01:48

Mesaj gönderen sword »

MDRLK-----MRK--------ATIP
ALEMDAR SANAYI D4(DZ)
ALEMDAR SANAYI D5
ALEMDAR SANAYI D4(TM)
ALEMDAR SANAYI D4(TM)
ALEMDAR SANAYI D4(DZ)
ALEMDAR SANAYI D4(DZ)
ALEMDAR SANAYI D5
ALEMDAR SANAYI D5
ALEMDAR SANAYI D4(TM)
ALEMDAR SANAYI D4(TMKR)
ALEMDAR SANAYI D5
ALEMDAR SANAYI D5
ALEMDAR SANAYI D5
ALEMDAR SANAYI D5
ALEMDAR SANAYI D4(DZ)
ALEMDAR SANAYI D4(TM)
ALEMDAR SANAYI D4(DZ)
ALEMDAR KOSEKOY D4(DZ)
ALEMDAR KOSEKOY D5
ALEMDAR KOSEKOY D4(DZ)
ALEMDAR KOSEKOY D5
ALEMDAR KOSEKOY D5
ALEMDAR KOSEKOY D5
ALEMDAR KOSEKOY D4(DZ)
ALEMDAR KOSEKOY D5
......................................
.................
................
GEBZE DARICA D4(TM)
GEBZE DARICA D5
GEBZE DARICA D5
GEBZE DARICA D4(TM)
GEBZE DARICA D5
GEBZE DARICA D4(TM)
GEBZE DARICA D4(TM)
GEBZE DARICA D5
GEBZE DARICA D5
GEBZE DARICA D5
GEBZE DARICA D4(KK)
GEBZE DARICA D5
GEBZE DENIZLI D5
GEBZE DILOVASI D4(KK)
GEBZE DILOVASI D4(TM)
GEBZE DILOVASI D5
.......................
.....................
GOLCUK GOLCUK D5
GOLCUK GOLCUK D4(KK)
GOLCUK GOLCUK D4(TM)
GOLCUK GOLCUK D5
GOLCUK GOLCUK D4(TM)
GOLCUK HALIDERE D5
GOLCUK HALIDERE D4(TM)
GOLCUK HALIDERE D4(TM)
GOLCUK HALIDERE D4(TM)
GOLCUK HISAREYN D4(DZ)
GOLCUK HISAREYN D5
GOLCUK IHSANIYE D4(TM)
GOLCUK IHSANIYE D5
GOLCUK IHSANIYE D4(TM)
GOLCUK IHSANIYE D4(TM)
GOLCUK IHSANIYE D5
GOLCUK IHSANIYE D4(TM)
GOLCUK IHSANIYE D4(TM)
GOLCUK IHSANIYE D4(TM)
GOLCUK IHSANIYE D4(DZ)
GOLCUK IHSANIYE D4(TMKR)
GOLCUK IHSANIYE D5

Tablom yukarıdaki gibi ve ben bunu sql ile
MDRLK.......MRK.......D4(DZ).....D4(TM)......D4(TMKR).......D5
-----------------------------------------------------------------------
ALEMDAR... SANAYI.... 5........... 4............... 2................. 7

..........................................................................................
............................................................................................
.........................................................................................

gibi şekle sokmak istiyorum...
mdrlk ve mrk göre gruplandırıp şartta makina tipini ve mrkleri baz alıp saydırma yaptırdığımda sonuçlar sıfır dönüyor yani saymıyor....(vt.Dbase)
Kolay gelsin.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Kod: Tümünü seç


SELECT DISTINCT A.MDRLK, A.MRK,
(SELECT COUNT(*) FROM HAREKET Z WHERE Z.MDRKL = A.MDRLK AND Z.MRK = Z.MRK AND Z.ATIP = 'D5') D5_SAYISI,
(SELECT COUNT(*) FROM HAREKET Z WHERE Z.MDRKL = A.MDRLK AND Z.MRK = Z.MRK AND Z.ATIP = 'D4(DZ)') D4DZ_SAYISI,
(SELECT COUNT(*) FROM HAREKET Z WHERE Z.MDRKL = A.MDRLK AND Z.MRK = Z.MRK AND Z.ATIP = 'D4(TM)') D4TM_SAYISI
FROM HAREKET A

işinizi görmesi lazım. Ancak SUM edecekseniz, COUNT(*) yerine SUM etmek istediğiniz fieldı koyun.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
sword
Üye
Mesajlar: 18
Kayıt: 31 Ara 2004 01:48

Mesaj gönderen sword »

Kuri_TLJ yazdı:

Kod: Tümünü seç


SELECT DISTINCT A.MDRLK, A.MRK,
(SELECT COUNT(*) FROM HAREKET Z WHERE Z.MDRKL = A.MDRLK AND Z.MRK = Z.MRK AND Z.ATIP = 'D5') D5_SAYISI,
(SELECT COUNT(*) FROM HAREKET Z WHERE Z.MDRKL = A.MDRLK AND Z.MRK = Z.MRK AND Z.ATIP = 'D4(DZ)') D4DZ_SAYISI,
(SELECT COUNT(*) FROM HAREKET Z WHERE Z.MDRKL = A.MDRLK AND Z.MRK = Z.MRK AND Z.ATIP = 'D4(TM)') D4TM_SAYISI
FROM HAREKET A

işinizi görmesi lazım. Ancak SUM edecekseniz, COUNT(*) yerine SUM etmek istediğiniz fieldı koyun.

Kolay Gelsin
Z.MRK=Z.MRK ..(Z.MRK=A.MRK) olmalı sanırım...

Yukarıdaki yazmış olduğunuz sorguyu dbase tabloma uyguladığımda yetersiz hafıza hatası alıyorum..

Verileri aşağıdaki şekilde azalttım..

SELECT DISTINCT A.MDRLK, A.MRK,
(SELECT COUNT(*) FROM ASTATIK Z WHERE Z.MDRLK = A.MDRLK AND Z.MRK = A.MRK AND Z.ATIP = 'D5') D5_SAYISI,
(SELECT COUNT(*) FROM ASTATIK Z WHERE Z.MDRLK = A.MDRLK AND Z.MRK = A.MRK AND Z.ATIP = 'D4(DZ)') D4DZ_SAYISI
FROM ASTATIK A

sonuç olarak makina sayılarını sıfır döndürdü...

v.t den mi kaynaklanıyor bilemiyorum..bunu başka bir SQL kodu ile yapabilirmiyiz...veya başka bir öneriniz var mı?
kolay gelsin...
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Düzeltmeniz doğru A.MDRLK olacaktı yazım hatası yapmışım.

Memory hatası almanız doğal zira DBase dosyalar kullanıyorsunuz :) Eğer mümkünse bırakın Dbase'i paradoxu Access'i bence ivedilikle FB'ye veya muadili başka bir veri tabanına kaydırın yazılımlarınızı.

Zahmetli bir iş ama işinizi daha sonrasında rahatlatır.

Farklı öneriye gelince işinizi 1 adımdan daha fazla adım alarak yapın derim.

Yani bir başka table oluşturun, sonra distinct bir Query ile ASTATIK tablosundaki her bir MDRLK ve MRK için yeni oluşturduğunuz tabloya kayıtları atın.

Yani yeni tablo aslında sizin Sonuç elde etmek istediğiniz Query'nin bir kopyası niteliğinde (structure'ına sahip) bir tablo olmalı ve manuel olarak siz bir döngü ile her bir kombinasyon için basit Query'lerle sonuçları yeni tabloya ekleyin ve son olarak da o tabloyu selct eden bir Query yazın.

Başka bir DB kullansaydınız bu kadar zorlanmazdınız diye tahmin ediyorum.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
sword
Üye
Mesajlar: 18
Kayıt: 31 Ara 2004 01:48

Mesaj gönderen sword »

Yardım ve önerileriniz için teşekürler kuri_TL...
1500 satırlık bir Dbase nin böyle bir sorguda çakılmasına şaşırdım .. bu iş gruplandırılarak yapılamazmı idi diye de kafamda bir soru işareti kaldı..gruplandırılarak niçin saydırılmıyor..mantığını çözemedim...
Kolay gelsin..
Cevapla