SQL -- ROW_NUMBER kullanımı
Merhabalar
Sqlde bazen bütün kolonlar biribirini tekrar eder ama sadece 1 kolon farklıdır, işte bu durumda biz hep 1 tanesini secmek isteriz,
bunu yapmanın çeşitli yöntemleri vardır, biz bugun row_number ı göreceğiz,
bir tane tablo tipinde bir değişken tanımlayalım
[code=sql]
Declare @tablo table(Nesne varchar(100), fiyat float)
insert into @tablo
select 'Nesne1', 12 union all
select 'Nesne1', 21 union all
select 'Nesne1', 122 union all
select 'Nesne2', 321 union all
select 'Nesne2', 123 union all
select 'Nesne3', 222 union all
select 'Nesne3', 32 union all
select 'Nesne4', 221 union all
select 'Nesne4', 123 union all
select 'Nesne4', 122
select row_number() over(order by Nesne) as row_number, * from @tablo
[/code]
Çıktı olarak karşımıza
row_number Nesne fiyat
1 Nesne1 12
2 Nesne1 21
3 Nesne1 122
4 Nesne2 321
5 Nesne2 123
6 Nesne3 222
7 Nesne3 32
8 Nesne4 221
9 Nesne4 123
10 Nesne4 122
Burada görüldüğü gibi bize sadece increamental bir id atadı ,
Şimdi ise nesne tipinde bir gruplama yapalım
[code=sql]
Declare @tablo table(Nesne varchar(100), fiyat float)
insert into @tablo
select 'Nesne1', 12 union all
select 'Nesne1', 21 union all
select 'Nesne1', 122 union all
select 'Nesne2', 321 union all
select 'Nesne2', 123 union all
select 'Nesne3', 222 union all
select 'Nesne3', 32 union all
select 'Nesne4', 221 union all
select 'Nesne4', 123 union all
select 'Nesne4', 122
select row_number() over(partition by Nesne order by Nesne) as row_number, * from @tablo
[/code]
row_number Nesne fiyat
1 Nesne1 12
2 Nesne1 21
3 Nesne1 122
1 Nesne2 321
2 Nesne2 123
1 Nesne3 222
2 Nesne3 32
1 Nesne4 221
2 Nesne4 123
3 Nesne4 122
şimdi de row number ı 1 olanları getirelim
[code=sql]
Declare @tablo table(Nesne varchar(100), fiyat float)
insert into @tablo
select 'Nesne1', 12 union all
select 'Nesne1', 21 union all
select 'Nesne1', 122 union all
select 'Nesne2', 321 union all
select 'Nesne2', 123 union all
select 'Nesne3', 222 union all
select 'Nesne3', 32 union all
select 'Nesne4', 221 union all
select 'Nesne4', 123 union all
select 'Nesne4', 122
select * from (
select row_number() over(partition by Nesne order by Nesne) as row_number, * from @tablo)aa
where aa.row_number = 1
[/code]
row_number Nesne fiyat
1 Nesne1 12
1 Nesne2 321
1 Nesne3 222
1 Nesne4 221