SQL de sorguya (sahte)artan sayı eklemek

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
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

SQL de sorguya (sahte)artan sayı eklemek

Mesaj gönderen Uğur1982 »

Merhaba arkadaşlar;

Hareket Tablosundaki veriler. :arrow:

Kod: Tümünü seç

 
     Kod   Adi     Arac_No
      1     ugur     1         
      4     irem     2         
      5     hayro    2        
Çıkmasını istediğim şöyle bir liste. :arrow:

Kod: Tümünü seç

 
SahteArtanSayi     Kod   Adi     Arac_No
 1                 1     ugur     1         
 2                 4     irem     2         
 3                 5     hayro    2        
Yukarıdaki gibi ilk kayıttan itibaren 1 artarak gitmesini istiyorum...

Bunu SQL de nasıl yapabiliriz... :?:

vt: Firebird 1.5

Teşekkür ederim...
Kullanıcı avatarı
miskin
Üye
Mesajlar: 103
Kayıt: 26 Tem 2005 02:02
Konum: Gavuristan

Mesaj gönderen miskin »

Kod: Tümünü seç

SELECT Kod,   Adi,     Arac_No,  
Count(Kod) as SahteArtanSayi     
From Harakettablosu
Group by Kod 

Bilmem böyle birsey isine yararmi
miskin
Ve Tanri, bütün kullarini davul edecek :)
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

Ne yazık ki olmuyor.Büyün satırlara aynı değeri atıyor.
Aslında bu Udf ile yapılabilir gibi geliyor.
Rfunc Udf de IncDate.bunun benzeri bir Udf ile kolay yapılabilir.Ama onu da bulamadım... :roll:

iyi günler..
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Tek SQL cümlesi içinde nasıl yapılır bilmiyorum ama aklıma gelen tek yöntem bu işlem için bir generator oluşturmak (örneğin GEN_REC_NO) ve onun değerini bu sql'i çalıştırmadan önce 0 yapmak.

Kod: Tümünü seç

 set generator GEN_REC_NO to 0;
Sonra da SQL'ini şu şekilde değiştirmek

Kod: Tümünü seç

select gen_id(gen_rec_no,1) as SahteArtanSayi,alan1,alan2 from table;
Umarım yardımcı olur.
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

@t-hex teşekkür ederim. :wink:

iyi günler...
onaydin

Mesaj gönderen onaydin »

Başka veritabanlarında number, identity tarzı fonksiyonlarla satır numarası alınabiliyor. Firebird'de sanırım böyle bir fonksiyon yok ama zorlayarak bu şekle getirilebilir. Aklıma 2 yol geliyor ama boş yere uğraşmaya da gerek yok.
Delphi tarafında i = i + 1 gibi bir şekilde yazsanız daha kolay olur.
onaydin

Mesaj gönderen onaydin »

Evet bunu dusunmemistim. Süper bir çözüm.
cemarik
Üye
Mesajlar: 45
Kayıt: 30 Ağu 2003 11:05
Konum: İzmir

Mesaj gönderen cemarik »

Madem SQL Kısmında yapmak istiyorsun neden stored yapmıyorsun?

Kod: Tümünü seç

CREATE PROCEDURE PROC_ACTIONS
RETURNS (
    KOD VARCHAR(20),
    ADI VARCHAR(50),
    ARAC_NO INTEGER,
    SIRA INTEGER)
AS
BEGIN
  SIRA = 1;
  FOR
	SELECT 
		Kod,   
		Adi,     
		Arac_No,  
	FROM HAREKET_TABLOSU
        INTO 	:KOD,
		:ADI,
 		:ARAC_NO;
  BEGIN
   SIRA = SIRA+1;  
   SUSPEND;
  END
END
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

onaydin yazdı:Başka veritabanlarında number, identity tarzı fonksiyonlarla satır numarası alınabiliyor.
2.0 da eklenmiş olması lazım..
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

onaydin yazdı:Başka veritabanlarında number, identity tarzı fonksiyonlarla satır numarası alınabiliyor. Firebird'de sanırım böyle bir fonksiyon yok ama zorlayarak bu şekle getirilebilir. Aklıma 2 yol geliyor ama boş yere uğraşmaya da gerek yok.
Delphi tarafında i = i + 1 gibi bir şekilde yazsanız daha kolay olur.
Sql server da bu numarayı barından değişkenin ismi nedir?
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

cemarik yazdı:Madem SQL Kısmında yapmak istiyorsun neden stored yapmıyorsun?

Kod: Tümünü seç

CREATE PROCEDURE PROC_ACTIONS
RETURNS (
    KOD VARCHAR(20),
    ADI VARCHAR(50),
    ARAC_NO INTEGER,
    SIRA INTEGER)
AS
BEGIN
  SIRA = 1;
  FOR
	SELECT 
		Kod,   
		Adi,     
		Arac_No,  
	FROM HAREKET_TABLOSU
        INTO 	:KOD,
		:ADI,
 		:ARAC_NO;
  BEGIN
   SIRA = SIRA+1;  
   SUSPEND;
  END
END
Evet bu da güzel bir çözüm..teşekkür ederim..

iyi günler...
ng
Üye
Mesajlar: 192
Kayıt: 01 Mar 2004 11:49
Konum: Bursa
İletişim:

Mesaj gönderen ng »

Benimde bölyle bir şeye ihtiyacım olmuştu. Delphi tarafında Query'i içerisinde calculated bir alan oluşturdum mesela sayi.oncalculated cısmında ibQuery1sayi.asinteger:=ibQuery1sayi.asinteger+1; demiştim olmuştu.
başarılar
Cevapla