olasılıklara göre rastgele bir kayıt seçmek?

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
Matrix1536
Üye
Mesajlar: 19
Kayıt: 04 Tem 2007 11:32

olasılıklara göre rastgele bir kayıt seçmek?

Mesaj gönderen Matrix1536 »

bir tablom var.
bu tabloda
1-) isim
2-) olasılık
yazıyor.

ben bu olasılıklara göre rastgele bir isim seçmek istiyorum.
bunun için bir stored procedure yazmaya çalıştım.


önce

select @upper=sum(sprobability) from treasure_probability

diyerek tüm olasılıkları topladım.

daha sonra bu @upper ile 1 arasında rastgele bir sayı seçtim.
  • while @random<@upper
    begin
    SET @strSQL='SELECT TOP ' + @berkin + ' @upper=sum(sprobability),@sonuc=nitemnum FROM [dbo].[TREASURE_PROBABILITY]'
    EXEC (@strSQL)
    set @berkin=@berkin+1
    end
yaparak rastgele sayıyı @sonuc değerine atamaya çalıştım.

yanlız yukarıda yazdığım dinamik sorgu olduğu için bu stored procedure den tamamen ayrı olarak çalışıyor ve [@sonuc=nitemnum] eşitlemesini yapmıyor.
kendisi için ayrı bir @sonuc tanımlamamı istiyor.

benim sorum şu ;
bu dinamik sorguda yazdığım değerleri nasıl normal stored procedure'üme alırım?
(yani sorgudaki @upper ı benim tanımladığım @upper a nasıl alabilirim)

veya bu işi yapmanın daha değişik bir yolu var mı?
Matrix1536
Üye
Mesajlar: 19
Kayıt: 04 Tem 2007 11:32

Mesaj gönderen Matrix1536 »

yazdığım sorunu

select @strSQL = 'DECLARE curObjects CURSOR FOR Select TOP '+@berkin+' sum(sprobability) from treasure_probability where btype='+cast(@ney as varchar(1))+' group by btype'
EXEC(@strSQL)
open curObjects fetch next from curObjects into @alper
select @alper,@random--while (@@fetch_status = 0) begin print @alper fetch next from curObjects into @alper end
close curObjects deallocate curObjects


ile hallettim


ancak bu sefer başka bi sorunum var...


select top 2 sum(sprobability) from ...
sorgusu sadece ilk 2 sıranın toplamını değil , tamamının toplamını seçiyor.

sadece ilk 2 sıranın toplamını nasıl bulabilirim?
Matrix1536
Üye
Mesajlar: 19
Kayıt: 04 Tem 2007 11:32

Mesaj gönderen Matrix1536 »

bu sorunu da aşağıdaki kodu kullanarak geçtim.

select @strSQL = 'DECLARE curObjects CURSOR FOR Select TOP '+@berkin+' sum(x.sprobability) from (select Top '+@berkin+' * from treasure_probability) as x where btype='+cast(@ney as varchar(1))+' group by btype'


şimdi sorum =>

benim istediğim kayıtın berkin'inci kayıtta olduğunu öğrendim.
berkin'inci kayıta nasıl ulaşabilirim?
Cevapla