none
Sql While Sorgusu RRS feed

  • Soru

  • Merhaba arkadaşlar bir sorgumda while kullanmam gerekiyor.
    Şöyle bir durum;
    0 den 450ye kadar puan sıralaması var.Puan belli aralıkla artıyor.
    Bu puan aralıklarında gelen kullanıcıları listelemek istiyorum.
    Aşağıda yapmak istedigim ve denediğim sorgular var.
    Yardımcı olursanız sevinirim.
    Hoşcakalın.
    Burada öylesine manuel değer verdim.
    DECLARE @ArtisOranı int
    DECLARE @EnYuksekPuan int
    DECLARE @EnDusukPuan int
    SET @ArtisOranı = 50 
    While @ArtisOranı < @EnYuksekPuan
    select @EnYuksekPuan = max(Puan) ,
      @EnDusukPuan=min(Puan) 
    From Puan


    Puan Aralığı Kişi Sayısı
    0 50 4
    50 100 1
    100 150 5
    150 200 4
    200 250 2
    250 300 11
    300 350 2
    350 400 2
    400 450 5

     

    • Düzenleyen geek-mind 19 Aralık 2011 Pazartesi 11:19
    19 Aralık 2011 Pazartesi 11:18

Yanıtlar

  • Merhaba Serdar,

    Eminim daha iyi bir yöntem vardır ama ben problemin çözümüne baaşlayınca söyle bir select ile sonlandırdım.

    Burada bir SQL Numbers Table fonksiyonu kullandım. Ayrıca multiple CTE expression 'lardan faydalandım.

    Umarım işine yarar

    with r as (
    	select rn = row_number() over (order by i), i from dbo.NumbersTable(0,450,50)
    ), r2 as (
    	select
    		r.rn, r.i lr, r2.i ur
    	from r
    	inner join r r2 on r.rn + 1 = r2.rn
    ), s as (
    	select
    		UserId, 
    		Score,
    		r2.*
    	from Scores s, r2
    	where s.score between r2.lr and r2.ur
    )
    select distinct
    	r2.lr, r2.ur,
    	count(userid) over (partition by r2.rn) cnt
    from r2
    left join s on r2.rn = s.rn
    
    

     


    SQL Server, SQL Server 2012 Denali and T-SQL Tutorials
    • Yanıt Olarak İşaretleyen geek-mind 16 Şubat 2012 Perşembe 07:37
    21 Aralık 2011 Çarşamba 09:21