string değerlerin bir aradaki sorgusu

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

string değerlerin bir aradaki sorgusu

Mesaj gönderen sabanakman »

İyi günler. Bir SQL sorunum var? String bir alan bilgisini ardışık toplam olarak almanın yolu var mıdır? Örnekle söylersem:
Adı No
--- ---
Ali 1
Veli 2
Cem 3

mesela select Sum(No) from tablo bana 6 değerini üretecek ama ben select Sum(Adı) from tablo gibi bir sorgu sonucunda AliVeliCem değeri elde etmek istiyorum. Bunu yapmanın bir yolu var mıdır? Veya başka bir yol ile ben bu değeri nasıl elde ederim?
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Tam anlamadım ama Adı alanındakileri tek satırda yazıp genel toplam gibi bir şey biraz daha detaylandırabilirmisiniz?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
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,

M$-SQL Server2005'de bu özellik SELECT'e eklenmişti (SELECT'in helpinde olması lazım, şu anda hatırlayamıyorum.) ama tanıtımlarından birinde şöyle bir şeyden bahsedilmişti.

SELECT cümlesini kullandığınızda, string değerleri, aralarına istediğiniz bir işaret koyarak yanyana oluşturulmuş bir result set döndürebiliyorsunuz denmişti ve örnek cümle gösterilmişti.

Sanırım tam aradığınız şey ama M$-SQL Server 2005 versiyonunda var bu özellik. Daha öncesinde yok, daha öncesinde yapmak isterseniz, bir SP yazacaksınız (benim ilk aklıma gelen çözüm) bu SP içerisinde varchar bir değişken tutacaksınız. Select'ten dönen Result Set'i CURSOR içinde turlayarak, bu değişkene manuel ekleyeceksiniz ve sonuç olarak da elde ettiğiniz bu değişkeni result olarak döndüreceksiniz.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Aklın yolu birmiş Sn. Kuri_YJ, bende şöyle ıssız bir ortamda uzun uzun düşünürken (şu Türkler için meşhur mucitlik ortamı :) ) SP yazmak geldi aklıma. SP konusunda zayıfım ama siz buradan sakın cevap yazmayın ben biraz çalışayım. Öylesi daha zevkli oluyor. Çözemezsem buradan yazarım çözersemde yazarım ama şimdi çözüm adına biraz çalışayım gayrı. Öneriniz için teşekkürler iyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
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,

Zaten ben genelde hazırlöp çözümlerden çok mantık yönünde yardımcı olmaya çalışırım. Ama hiç kod yardımı yapmıyor da değilim.

Genelde arkadaşların sıkıştıkları yerde code'larını inceleyip öneri vermek daha iyi oluyor. zira arkadaşlar da kendileri üretip mantıkları öğrenmiş oluyorlar. Bu daha iyi bir çözüm.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Kod: Tümünü seç

CREATE PROCEDURE tablo_genis
AS
declare
  @ST nvarchar(10), @TOP nvarchar(500)
begin
  Declare curpos CURSOR static FOR
  SELECT Ref FROM Tablo
  OPEN curpos
  FETCH First FROM curpos into @ST
  WHILE (@@FETCH_STATUS = 0)begin
    SET @TOP=isNull(@TOP,'')+isNull(@ST,'')
    FETCH Next FROM curpos into @ST
  end
  CLOSE curpos
  DEALLOCATE curpos
  select @TOP
end;
Stored Procedure si ile EXEC tablo_genis şeklinde kullanırsam yukarıdaki sorunum çözülmüş olmaktadır. Aslında bunu fonksiyon olarak yazmak daha pratik olacaktı ama maksat kodların nasıl kullanıldığı ortaya çıksın idi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla