not containedin either an aggregate function on the GROUP BY

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

not containedin either an aggregate function on the GROUP BY

Mesaj gönderen palandoken »

Arkadaşlar Merhaba,
Şu kodu yazdığım zaman aşağıdaki hatayı veriyor.

Kod: Tümünü seç

   with veri.IBQ_Form_001_Listele do
      begin
         Database := Veri.IBDatabase1 ;
         SQL.Clear ;
         SQL.Add('Select Count(*) as Toplam_Kayit,') ;
         SQL.Add('Case DURUM When 0 then ''Aktif'' When 1 then ''Göç Etti'' When 2 then ''Geçici Olarak Göç Etti'' When 3 then ''Öldü'' end as Durum') ;
         SQL.Add(' from FORM_001 ') ;
         SQL.Add('Where KURUM_IDNO=:PKURUM_IDNO') ;
         SQL.Add(' Order By MUHTARLIK,SOKAK,HANE_NO,SOYADI,DOGUM_TARIHI,ADI');
         ParamByName('PKURUM_IDNO').AsString := AktifKurumIDNO ;
         Open ;
         Caption:= FieldByName('Toplam_Kayit').Text ;
      end ;
Hata şu:

SQL.Error code = -104
Invalid expression in the select list(not contained in either an aggregate function on the GROUP BY clause)


Bu hatayı nasıl giderebilirim.
Teşekkürler...
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
hgunes
Üye
Mesajlar: 27
Kayıt: 01 Nis 2007 03:40
Konum: Çorum

Mesaj gönderen hgunes »

Merhaba

Kod: Tümünü seç

Select Count(*) as Toplam_Kayit, 
Case DURUM 
 When 0 then ''Aktif'' 
 When 1 then ''Göç Etti'' 
 When 2 then ''Geçici Olarak Göç Etti'' 
 When 3 then ''Öldü'' 
end as Durum 
 from FORM_001 
Where KURUM_IDNO=:PKURUM_IDNO 
GROUP BY Durum
GROUP BY kullanmadığınızdan sanırım hata verdi.
Burada Order By 'a gerek yoktur. Select ifadesinde COUNT kullandığınız için Sıralamayı ancak Toplam_Kayit veya Durum alanlarına göre yapabilirsiniz. Bu da pek anlamlı olmaz.
Sizin görmek istediğiniz sonuç sanırım şu : KurumID'si XX olan kayıtlardan kaçı Aktif, kaçı Göç Etti vesaire.

Kolay gelsin.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba,
ek olarak şöyle basit bir kuraldan bahsetmek istiyorum, eğer bir select ifadesi SUM,COUNT,MAX,AVG gibi fonksiyonlarla sonuç döndürüyorsa,

a-)Sonuç olarak tek bir alan dönüyorsa GROUP BY a gerek yok
b-)birden fazla alan dönüyorsa GROUP BY kullanmak zorundasınız.

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
palandoken
Üye
Mesajlar: 151
Kayıt: 16 Eki 2006 10:43
Konum: ERZURUM

Mesaj gönderen palandoken »

Tamam ciğerler teşekkür ederim.Yaptım.

Belki bu konuda diğer arkadaşlara yardımı olur.Birden fazla alanı sorguda göstermek istiyorsak kod şu:(Bunu ben yeni öğrendim :oops: )

Kod: Tümünü seç

Select Count(*) as Toplam_Kayit,ADI,SOYADI,BABA_ADI, 
Case DURUM 
 When 0 then ''Aktif'' 
 When 1 then ''Göç Etti'' 
 When 2 then ''Geçici Olarak Göç Etti'' 
 When 3 then ''Öldü'' 
end as Durum 
 from FORM_001 
Where KURUM_IDNO=:PKURUM_IDNO 
GROUP BY Durum,ADI,SOYADI,BABA_ADI 
Herkese kolay gelsin.
akıllanma , aklını başına toplama , toparlanma , kendisini derleme bu dünyaya ait bir vazife.
ahirette nasıl olsa aklın başına gelecek.
Cevapla