string sum

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
graganda
Üye
Mesajlar: 5
Kayıt: 13 Nis 2005 04:22

string sum

Mesaj gönderen graganda »

Merhaba.

Sum() fonksiyonunun string için bir türevi var mıdır?

yani
1 a
1 b
2 a
2 c
--------------
1 a,b
2 a,c gibi bir ifade
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

sum ın açılımı summary dir yani matematiksel bir fonksiyondur bunu FireBird içinde sadede sayısal alanlar için kullanabilirsin. senin istediğin Adet ise count verdiğin field ın verdiğin koşullara uygun kaç adet oldunu döndürür. Field ın tipi önemli değildir.
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
graganda
Üye
Mesajlar: 5
Kayıt: 13 Nis 2005 04:22

Mesaj gönderen graganda »

anlıyorum.
peki bunu bir fonksiyon yazarak yapabilir miyim?
(sadece 1 haftadır uğraşıyorum)

yani uzun bir sql cümlesi yazdım. sonucunda 25 alan seçiyor.
kısaca
miktar | tanım | renkler |
123 kalem mavi
123 kalem sarı
123 kalem mor
213 silgi mavi
213 silgi mor

gibi bir sonuca ulaşıyorum
yapmak istediğim sadece
miktar | tanım | renkler |
123 kalem mavi,sarı,mor
213 silgi mavi,mor


en azından şu yöne doğru gidebilirsin demeniz bile yeterli.

teşekürler
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 , bu gibi bir işlem için grup lama fonksiyonlarından yararlanabilrsiniz örneğin,

Kod: Tümünü seç

select count(id)  as toplam , kategori , renkler from TABLO group by kategori , renkler order by kategori , renkler
gibi. bu size yol gösterci olaibilir. iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Valla vt ne kullanıyosunuz bilmiyorum ama şöyle bir düşündüm sql ile pek bişey çıkaramdım, delphi tarafından da bişey gelmedi aklıma ancak fonksiyon ile yapabilirsiniz gibi geldi bana. ms sql server için şöyle bişey yazabiliriz:

Kod: Tümünü seç

CREATE FUNCTION renkler(@tanim varchar(15))
AS RETURNS VARCHAR(50)
   DECLARE @renkler varchar(50),@renk varchar(10)
   DECLARE CursorName CURSOR
	FOR SELECT renk FROM Tablo Where tanim=@tanim
  OPEN CursorName
  FETCH NEXT FROM CursorName
  INTO @renk
  WHILE @@FETCH_STATUS = 0
  BEGIN
     SET @renkler = @renkler +' , ' + @renk
     FETCH NEXT FROM CursorName
     INTO @renk
  END
  CLOSE CursorName
  DEALLOCATE CursorName
  RETURN @renkler

Siz bunu çağırırken:

Kod: Tümünü seç

Select sum(miktar),tanim,dbo.renkler(tanim) AS renkler
From Tablo Group by tanim
diye çağırırsınız. dönen değer:

Kod: Tümünü seç

miktar   tanim   renkler
-------   -------  ---------
123       kalem   mavi , sarı , kırmızı
............................................
şeklinde olur
graganda
Üye
Mesajlar: 5
Kayıt: 13 Nis 2005 04:22

Mesaj gönderen graganda »

çok teşekkürler.
yazdığınız şey tam anlatmak istediğim şey.

veritabanı firebird.
programcı değilim sadece bir rapor almam gerekiyor.
ama tıkandım kaldım.
sanırım sql server için yazdığınız kodları firebird e çevirmek biraz uğraştıracak.
çok teşekkür ediyorum.
sanırım önce firebird için fonksiyon yazmayı öğrenmem gerek.
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Bende firebirdü pek bildiğimi söyleyemem ama eğer yarına kadar bunu çevirebilecek bir babayiğit çıkmazsa ben bir bakarım çevirmek için :)
onaydin

Mesaj gönderen onaydin »

Kod: Tümünü seç

CREATE PROCEDURE NEW_PROCEDURE 
RETURNS (
    AD VARCHAR(10),
    MADDE_NO INTEGER,
    METIN VARCHAR(255))
AS
declare variable DLR_RENK varchar(10);
begin
  For Select MADDE_NO, AD from MADDE group by MADDE_NO, AD into :MADDE_NO, :AD
  do
  begin
  METIN = '';
   for select RENK from MADDE where MADDE_NO = :MADDE_NO into    :DLR_RENK
   do
    begin
      METIN = METIN || ', ' || DLR_RENK ;
    end
     METIN = substring(METIN from 2 FOR 255);
    suspend;
  end
Cevapla