Running Total Or SQL RecordCount

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ı
mkaderoglu
Üye
Mesajlar: 48
Kayıt: 04 Tem 2007 11:14
Konum: Konya
İletişim:

Running Total Or SQL RecordCount

Mesaj gönderen mkaderoglu »

Yazdığım programda Hareketli bakiye almam gereken bir modül var. Yani her satırda bir önceki satırın bakiyesini toplaması gerek. Bu işi Delphi tarafında kolaylıkla yapıyorum. Fakat bunu SQL tarafında halletmem gerek. Kafamda bir metot geliştirdim. SUBQUERY kullanarak (satır numarasına kadar olanların bakiyelerini) satir bakiyesi ile toplarsam sorun çözülüyor. Fakat bu seferde datasını almak istediğim muhasebe programının ROW_ID diye bir alanda tuttuğu satır numarasının bir sonraki tarihte bir önceki tarihe göre küçük olabileceğini gördüm. Yani anlayacağınız bana çalıştırdığımda her satıra bir sıralı numara verecek bir SQL fonksiyonu yada kodu lazım. Yardımcı olacak arkadaşlara şimdiden çok teşekkür ediyorum.

RunningTotal için SQL tarafında farklı bir alternatifi olan arkadaşlara ayrıca teşekkür ediyorum. :D
Hayat öldüğünde diplomanı alacağın bir okuldur. Önemli olan doğru hocaları bulmak.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

MS-SQL de nasıl olduğunu bilemiyorum, genelde m$ ın mantığı AutoInc (otomatık artan sayı/alan) tarzında.. Firebirde göre tarif etmek gerekirse GENERATOR ile yapılabilir. Generator her kayıtta artacağı için hesaplatırken Row_Id de olduğu gibi mevcuttan küçükler demeniz işinizi görecektir.

Bu belki işe yarar: http://www.clevercomponents.com/article ... rators.asp

Bu da Firebird'deki Generator: viewtopic.php?t=11204&view=previous
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Merhaba,

Cursor tanimlayarak satirlari tek tek kontrol edin, bir onceki satirdaki gerekli ID alani stored procedure'un / function'ın icinde tanimladiginiz bir degiskene atayip, gerekli hesabi yaptirip, aktif cursordaki kayda yansitin.

Kolay gelsin.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

SubQuery aslında sonucu döndürecektir. Kayıt değil de tarih şartına göre yazmalısınız.

Örneğin:

Kod: Tümünü seç

SELECT
  T1.URUN_KODU,
  T1.TARIH,
  (SELECT SUM(T2.MIKTAR) FROM TABLO T2 WHERE T2.URUN_KODU = T1.URUN_KODU AND T2.TARIH <= T1.TARIH) AS MIKTAR
FROM TABLO T1
GROUP BY T1.URUN_KODU, T1.TARIH
ORDER BY T1.URUN_KODU, T1.TARIH
Eğer kastınız bu idiyse.

RunningTotal'dan kastınızı anlayamadım.
Kullanıcı avatarı
mkaderoglu
Üye
Mesajlar: 48
Kayıt: 04 Tem 2007 11:14
Konum: Konya
İletişim:

çok teşekkür ederim

Mesaj gönderen mkaderoglu »

yardımcı olan bütün arkadaşlara çok teşekkür ederim. rSimsek hocamın dediğini inceleyemedim fakat şimdi bakacağım ama Hakan Can arkadaşımızın söylediği gibi tarihe göre yapamam çünkü aynı tarihte aynı firma yada ürün birden fazla hareket geçirmiş olabiliyor.Sanırım Glen arkadaşımızın söylediğinide yapamıyoruz çünkü bahsettiğim tablo unionla oluşturuldu şöyle yazayım

Kod: Tümünü seç


SELECT
  ... AS IslemTipi,
  (Select CariKart.Unvan1 From SIRKET.CHK CariKart Where CariKart.HesapKodu=CariHareket.HesapKodu) AS Unvani,
  CariHareket.EvrakNo AS EvrakNo,
  (CAST(CAST(CariHareket.Tarih AS integer) AS datetime)-2) AS Tarih,
  CariHareket.HesapKodu AS HesapKodu,
  ... AS Aciklama,
  (Case When CariHareket.BA = 0 Then CariHareket.Tutar Else 0 END) AS Borc,
  (Case When CariHareket.BA = 1 Then CariHareket.Tutar Else 0 END) AS Alacak,
  ((Case When CariHareket.BA = 0 Then CariHareket.Tutar Else 0 END)-(Case When CariHareket.BA = 1 Then CariHareket.Tutar Else 0 END)) AS Bakiye,
  ... AS MuhasebeKodu
FROM
  SIRKET.CHI CariHareket
Where
  CariHareket.HesapKodu Like :CariKod

UNION ALL

SELECT
  ... AS Unvani,
  CariHareket.KarsiEvrakNo AS EvrakNo,
  (CAST(CAST(CariHareket.Tarih AS integer) AS datetime)-2) AS Tarih,
  CariHareket.KarsiHesapKodu AS HesapKodu,
  ... AS Aciklama,
  (Case When CariHareket.BA = 1 Then CariHareket.Tutar Else 0 END) AS Borc,
  (Case When CariHareket.BA = 0 Then CariHareket.Tutar Else 0 END) AS Alacak,
  ((Case When CariHareket.BA = 1 Then CariHareket.Tutar Else 0 END)-(Case When CariHareket.BA = 0 Then CariHareket.Tutar Else 0 END)) AS Bakiye,
  ... AS MuhasebeKodu
FROM
  SIRKET.CHI CariHareket
Where
  CariHareket.KarsiHesapKodu Like :CariKod




kodun tamamını yapıştıracaktım baktım baya uzuyor bende satır sayısını kabartan ve gereksiz olan alanları ... ile belirttim bu yapı üzerinde yardımcı olabilirseniz çok sevinirim. Birde yazılarınızı sabah okuyabildim akşam eve gittim uzun bir aradan sonra sakın bizi takmıyor sanmayın sizin vereceğiniz her bir bilgi benim için hazinedir. Şimdiden herkese çok teşekkür ederim
Hayat öldüğünde diplomanı alacağın bir okuldur. Önemli olan doğru hocaları bulmak.
Kullanıcı avatarı
mkaderoglu
Üye
Mesajlar: 48
Kayıt: 04 Tem 2007 11:14
Konum: Konya
İletişim:

Mesaj gönderen mkaderoglu »

birde yeni başlık açıp forumu oyalamak istemedim. Neden aynı isimde parametre kullandığım halde iki parametrfe varmış gibi davranıyor delphi. bunu teke indirebileceğim bir şekil varsa paylaşabilirseniz çok sevinirim.
Hayat öldüğünde diplomanı alacağın bir okuldur. Önemli olan doğru hocaları bulmak.
unalaygun
Üye
Mesajlar: 139
Kayıt: 27 Mar 2004 12:34
Konum: istanbul

kolay gelsin

Mesaj gönderen unalaygun »

Arkadaşım eğer sql server 2005 kullanıyorsan rütbeleme fonksiyonları var bunlar senin işini görürü diye düşünüyorum row_number

ROWNUMBER
T-SQL'e yeni eklenen bir komut olan RowNumber bizler için kullanıldığı select ifadesinde her kayıt için unique bir rownumber ifadesi üretmesinin yanında özellikle SQL Server 2000'de zorlandığımız veri sayfalama işlemlerinide kolaylaştırmıştır.


SELECT ROW_NUMBER() OVER (ORDER BY FirstName) AS SıraNo, FirstName, LastName
FROM Person.Contact
ORDER BY FirstName

gibi kolay gelsin
derviş
Cevapla