mssql'de string toplama

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
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

mssql'de string toplama

Mesaj gönderen bgoktas »

merhaba arkadaşlar, sorum şu şekilde;

Kod: Tümünü seç

select musterino,sum(bakiye) from tblxxx
group by musterino
burada musterino ya göre bakiye toplamı alabiliyoruz.
Fakat ben müsterino ya göre gruplayarak string bir field'ın toplamını almak istiyorum. Örneğin;

Kod: Tümünü seç

müşterino      puan
-----------   ----------
1                     a
2                     b
3                     f  
1                     e
2                     a  
3                     c
query sonucu şöyle olmalı;

Kod: Tümünü seç

müşterino      puanlar
-----------   ----------
1                     ae
2                     ba
3                     fc  
mssql server 2000 kullanıyorum.
cevaplar için şimdiden teşekkürler...
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,

Bir SP yapacaksın :) İçinde'de güzel bir CURSOR, sonra o Cursor üzerinde döneceksin.

Dikkat Cursor'un Select'indeki ORDER'ı MüşteriNo'ya göre verip döneceksin. Müşteri No aynı kaldığı sürece bir değişkene bunları toplayacaksın.

Müşteri değişince elindeki toplanmış bilgiyi Temp bir tabloya atacaksın vs. vs.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Teşekkürler :D , ben belki daha kolay kurtulabilirim diye düşünmüştüm
ama olmadı :) .
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Kod: Tümünü seç

CREATE   PROCEDURE dbo.SpCalisanIsemriveMakineler
as
 DECLARE @TEMPMAKINENO VARCHAR(20)
 DECLARE @MAKINENO VARCHAR(20)
 DECLARE @REFAKATKARTNO VARCHAR(25)
 DECLARE @STRING VARCHAR(125)
 DECLARE MYCURSOR CURSOR FOR
      SELECT    MAKINA_NO, 
                     IS_EMRI_NO+'.'+ PARTI_NO+'.'+ TAMIR_NO 
     FROM        ProsesYukDurumu 
     WHERE     (MAKINA_NO<> '') 
     ORDER BY MAKINA_NO
DELETE FROM TMPGENELSCADA

 OPEN MYCURSOR
 FETCH NEXT FROM MYCURSOR  INTO @MAKINENO,@REFAKATKARTNO

 SET  @TEMPMAKINENO   = @MAKINENO
       WHILE @@FETCH_STATUS = 0
       BEGIN
          IF  (@TEMPMAKINENO = @MAKINENO)    SET  @STRING=@STRING+','+@REFAKATKARTNO     
          ELSE BEGIN
             INSERT INTO TMPGENELSCADA VALUES(@TEMPMAKINENO,@STRING)      
             SET @STRING=@REFAKATKARTNO
             SET  @TEMPMAKINENO   = @MAKINENO   
          END

             FETCH NEXT FROM MYCURSOR  INTO @MAKINENO,@REFAKATKARTNO
       END

CLOSE MYCURSOR
DEALLOCATE MYCURSOR
SELECT * FROM TMPGENELSCADA
RETURN

GO
böyle çözüldü...
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,

Oluşturduğun Temp tablo, Memory Temp değil sanırım. Bu sebeple bu raporu yada işlemi aynı anda 2 kişi başlatırsa ne olacak? :wink:

O temp tabloya bir de kullanıcı kodu ekle (aynı anda aynı kullanıcı koduyla sistemi kullanmadıklarını varsayıyorum) böylelikle her kullanıcı kendi kayıtları siler kendi kayıtlarına ekleme yapar ve kendi kayıtlarından select yapar.

Tabi biraz ellemen lazım SP'yi.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Bu proje için aynı anda 2 kez çalıştırılması pek mümkün olmamakla birlikte (return kümesini, procedure yi call eden, sahadaki endüstriyel bilgisayarların tablolarına aktarıyorum )
Söylediğinizde haklısınız, ben olayı sağlam kafayla bir düşüneyim :D, şu anda pek kafam basmıyor.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Aslında puan alanını, tablo yapılarını ve sonuçta görmek istediğinin ne olduğunu detaylı olarak izah edebilirsen galiba CASE WHEN, COALESCE ve SUB SELECT gibi vs. fonksiyonları kullanarak SP'ye gerek kalmadan SELECT querysi ile isteğini gerçekleştirebilirsin.

İyi çalışmalar.
Cevapla