Anda sedang offline saat ini, menunggu internet Anda untuk menyambung kembali

Browser Anda tidak didukung

Anda perlu memperbarui browser untuk menggunakan situs ini.

Perbarui versi terbaru dari Internet Explorer

Bagaimana secara dinamis nomor baris dalam sebuah Transact-SQL pilih pernyataan

Extended support for SQL Server 2005 ends on April 12, 2016

If you are still running SQL Server 2005 after April 12, 2016, you will no longer receive security updates and technical support. We recommend upgrading to SQL Server 2014 and Azure SQL Database to achieve breakthrough performance, maintain security and compliance, and optimize your data platform infrastructure. Learn more about the options for upgrading from SQL Server 2005 to a supported version here.

PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.

Klik disini untuk melihat versi Inggris dari artikel ini: 186133
Ringkasan
Artikel ini menjelaskan bagaimana secara dinamis peringkat baris saat Anda menjalankan sebuah pilih pernyataan dengan menggunakan metode yang fleksibel, yang mungkin satu-satunya solusi dan yang lebih cepat daripada solusi prosedural. Baris penomoran atau peringkat adalah masalah prosedural yang khas. Solusi biasanya didasarkan pada loop dan Daftar Tabel sementara; oleh karena itu, mereka didasarkan pada SQL Server loop dan kursor. Teknik ini didasarkan pada auto bergabung. Hubungan pilihan biasanya adalah "lebih besar daripada." Hitungan berapa kali setiap elemen dari satu set tertentu data memenuhi hubungan "lebih besar dari" ketika set dibandingkan dengan sendirinya.

Catatan Contoh berikut berdasarkan database pub . secara asali, Northwind sampel database dan database contoh pub tidak menginstal SQL Server 2005. Database ini dapat di-download dari Microsoft Download Center. Untuk informasi lebih lanjut, kunjungi Web site Microsoft berikut:Setelah Anda men-download SQL2000SampleDb.msi, ekstrak skrip database contoh dengan mengklik dua kali SQL2000SampleDb.msi. secara asali, SQL2000SampleDb.msi akan ekstrak skrip database dan berkas baca saya ke map berikut:
C:\SQLServer2000 sampel database
Ikuti petunjuk dalam berkas baca saya untuk menjalankan script instalasi.

Jika Anda menggunakan SQL Server 2005

Kami merekomendasikan bahwa Anda menggunakan fungsi peringkat yang disediakan sebagai fitur baru dalam SQL Server 2005. Untuk informasi selengkapnya tentang fungsi peringkat, kunjungi situs web Microsoft Developer Network (MSDN) berikut:back to the top

Contoh 1

Dalam contoh ini:
  • Set 1 adalah penulis.
  • Set 2 adalah penulis.
  • Hubungan adalah "nama pertama dan terakhir yang greaterthan."
  • Anda dapat menghindari masalah duplikat dengan membandingkan nama pertama + terakhir dengan nama lain pertama + terakhir.
  • Menghitung jumlah kali hubungan itu terpenuhi bycount(*).
Query:
   select rank=count(*), a1.au_lname, a1.au_fname   from authors a1, authors a2   where a1.au_lname + a1.au_fname >= a2.au_lname + a2.au_fname   group by a1.au_lname, a1.au_fname   order by rank				
Gunakan kode berikut dalam SQL Server 2005.
   select rank() OVER (ORDER BY a.au_lname, a.au_fname) as rank, a.au_lname, a.au_fname   from authors a   order by rank 
Hasil:
   Rank        Au_Lname              Au_Fname   ----        --------------        -----------     1         Bennet                Abraham     2         Blotchet-Halls        Reginald     3         Carson                Cheryl     4         DeFrance              Michel     5         del Castillo          Innes     6         Dull                  Ann     7         Greene                Morningstar     8         Green                 Marjorie     9         Gringlesby            Burt    10         Hunter                Sheryl    11         Karsen                Livia    12         Locksley              Charlene    13         MacFeather            Stearns    14         McBadden              Heather    15         O'Leary               Michael    16         Panteley              Sylvia    17         Ringer                Albert    18         Ringer                Anne    19         Smith                 Meander    20         Straight              Dean    21         Stringer              Dirk    22         White                 Johnson    23         Yokomoto              Akiko   (23 row(s) affected)				
back to the top

Contoh 2

Dalam contoh ini:
  • Peringkat toko dengan jumlah buku-buku yang dijual.
  • Set 1 adalah jumlah buku-buku yang dijual oleh toko: Pilih stor_id,qty=sum(qty) dari grup penjualan oleh stor_id.
  • Set 2 adalah jumlah buku-buku yang dijual oleh toko: Pilih stor_id,qty=sum(qty) dari grup penjualan oleh stor_id.
  • Hubungan adalah "jumlah buku adalah greaterthan."
  • Untuk menghindari duplikat, Anda dapat (sebagai contoh) compareprice * qty bukan qty.
Query:
   select rank=count(*), s1.stor_id, qty=sum(s1.qty)   from (select stor_id, qty=sum(qty) from sales group by stor_id) s1,        (select stor_id, qty=sum(qty) from sales group by stor_id) s2   where s1.qty >= s2.qty   group by s1.stor_id   order by rank				
Hasil:
   Rank     Stor_Id    Qty   ----     -------    ---   1         6380        8   2         7896      120   3         8042      240   4         7067      360   5         7066      625   6         7131      780   (6 row(s) affected)				
Catatan Nilai-nilai di kolom Qty salah. Namun, peringkat toko berdasarkan jumlah buku-buku yang dijual benar. Ini adalah sebuah cacat dari metode ini. Anda dapat menggunakan metode ini untuk kembali peringkat toko jika Anda tidak peduli tentang kuantitas salah dalam hasil.

Gunakan kode berikut dalam SQL Server 2005.
select row_number() over (order by qty desc) as rank,s1.stor_id,s1.qtyfrom (select stor_id, qty=sum(qty) from sales group by stor_id) as s1
Hasil:
rank     stor_id  qty-------  -------  ------1        7131     1302        7066     1253        7067     904        8042     805        7896     606        6380     8(6 row(s) affected)
Catatan Dalam SQL Server 2005, Anda dapat menerima hasil yang benar dari peringkat dan kuantitas bila Anda menggunakan fungsi peringkat.

back to the top

Contoh 3

Dalam contoh ini:
  • Peringkat penerbit dengan pendapatan mereka.
  • Set 1 adalah total penjualan oleh penerbit:
            select t.pub_id, sales=sum(s.qty*t.price)        from sales s, titles t        where s.title_id=t.title_id          and t.price is not null        group by t.pub_id					
  • Set 2 adalah total penjualan oleh penerbit:
            select t.pub_id, sales=sum(s.qty*t.price)        from sales s, titles t        where s.title_id=t.title_id          and t.price is not null        group by t.pub_id					
  • Hubungan adalah "mendapatkan lebih banyak uang daripada."
Query:
   select rank=count(*), s1.pub_id, sales=sum(s1.sales)   from    (select t.pub_id, sales=sum(s.qty*t.price)           from sales s, titles t           where s.title_id=t.title_id             and t.price is not null           group by t.pub_id) s1,           (select t.pub_id, sales=sum(s.qty*t.price)           from sales s, titles t           where s.title_id=t.title_id             and t.price is not null           group by t.pub_id) s2   where s1.sales>= s2.sales   group by s1.pub_id   order by rank				
Hasil:
   Rank     Pub_Id   Sales   ----     ------   --------   1         0736    1,961.85   2         0877    4,256.20   3         1389    7,760.85   (3 row(s) affected)				
Catatan Nilai-nilai di kolom penjualan salah. Namun, peringkat penerbit berdasarkan penghasilan benar.

Gunakan kode berikut dalam SQL Server 2005.
select rank() over (order by sales desc) as rank,s1.pub_id,s1.sales from (select t.pub_id, sales=sum(s.qty*t.price)     from sales s inner join titles t     on s.title_id=t.title_id     where  t.price is not null     group by t.pub_id) as s1
Hasil:
rank     pub_id  sales-------  ------  ---------1        1389    2586.952        0877    2128.103        0736    1961.85(3 row(s) affected)				
Catatan Anda menerima hasil yang benar peringkat dan penghasilan bila Anda menggunakan fungsi peringkat.

back to the top

Kelemahan

  • Karena bergabung salib, hal ini tidak dirancang untuk workingwith sejumlah besar baris. It works well untuk ratusan baris. Pada largetables, pastikan untuk menggunakan indeks untuk menghindari scan yang besar.
  • Ini tidak bekerja baik dengan nilai-nilai duplikat. Ketika youcompare duplikat nilai-nilai, penomoran baris terputus terjadi. Jika ini adalah notthe perilaku yang Anda inginkan, Anda dapat menghindari dengan menyembunyikan kolom peringkat ketika youinsert hasil dalam spreadsheet; menggunakan spreadsheet numberinginstead.

    Catatan Jika Anda menggunakan SQL Server 2005, Anda dapat menggunakan fungsi row_number() gulung balik nomor urut berturut-turut, terlepas dari duplikat.
Contoh:
   select rank=count(*), s1.title_id, qty=sum(s1.qty)   from (select title_id, qty=sum(qty) from sales group by title_id) s1,        (select title_id, qty=sum(qty) from sales group by title_id) s2   where s1.qty >= s2.qty   group by s1.title_id   order by rank
Hasil:
   Rank    Title_Id    Qty   ----    --------    ----   1       MC2222        10   4       BU1032        60   4       BU7832        60   4       PS3333        60   7       PS1372       140   7       TC4203       140   7       TC7777       140   10      BU1111       250   10      PS2106       250   10      PS7777       250   11      PC1035       330   12      BU2075       420   14      MC3021       560   14      TC3218       560   15      PC8888       750   16      PS2091      1728   (16 row(s) affected)				
back to the top

Manfaat

  • Anda dapat menggunakan pertanyaan ini dalam pandangan dan resultformatting.
  • Anda dapat menggeser berperingkat rendah data lebih ke kanan-atas.
Contoh 1:
   CREATE VIEW v_pub_rank   AS   select rank=count(*), s1.title_id, qty=sum(s1.qty)   from (select title_id, qty=sum(qty) from sales group by title_id) s1,        (select title_id, qty=sum(qty) from sales group by title_id) s2   where s1.qty >= s2.qty   group by s1.title_id				
Query:
   select  publisher=convert(varchar(20),replicate (' ', power(2,rank)) +           pub_id +           replicate(' ', 15-power(2,rank))+': '),           earnings=qty   from v_pub_rank				
Hasil:
   Publisher       Earnings   -------------   --------     0736          : 1,961.85       0877        : 4,256.20           1389    : 7,760.85				
Gunakan kode berikut dalam SQL Server 2005.
CREATE VIEW v_pub_rankASselect rank() over (order by sales) as rank,s1.pub_id,s1.sales 	from (select t.pub_id, sales=sum(s.qty*t.price)	from sales s, titles t	where s.title_id=t.title_id	and t.price is not null	group by t.pub_id) as s1GOselect  publisher=convert(varchar(20),replicate (' ', power(2,rank)) +	pub_id + replicate(' ', 15-power(2,rank))+': '),	earnings=salesfrom v_pub_rank order by rankGO
Hasil:
publisher            earnings-------------------- ---------------------  0736             : 1961.85    0877           : 2128.10        1389       : 2586.95(3 row(s) affected)

Contoh 2:
   CREATE VIEW v_title_rank   AS   select rank=count(*), s1.title_id, qty=sum(s1.qty)   from (select title_id, qty=sum(qty) from sales group by title_id) s1,        (select title_id, qty=sum(qty) from sales group by title_id) s2   where s1.qty >= s2.qty   group by s1.title_id				
Query:
   select  Book=convert(varchar(45),replicate (' ', 2*rank) +           title_id +           replicate(' ', 35-2*rank)+': '),           qty   from v_title_rank   order by rank				
Hasil:
   Book                                          Qty   -------------------------------------------   ----     MC2222                                 :      10           BU1032                           :      60           BU7832                           :      60           PS3333                           :      60                 PS1372                     :     140                 TC4203                     :     140                 TC7777                     :     140                       BU1111               :     250                       PS2106               :     250                       PS7777               :     250                         PC1035             :     330                           BU2075           :     420                               MC3021       :     560                               TC3218       :     560                                 PC8888     :     750                                   PS2091   :    1728   (16 row(s) affected)				
Gunakan kode berikut dalam SQL Server 2005.
CREATE VIEW v_title_rankASselect rank() over (order by qty) as rank, s1.title_id,s1.qtyfrom (select title_id, qty=sum(qty) from sales group by title_id) as s1GOselect Book=convert(varchar(45),replicate (' ', 2*rank) +title_id + replicate(' ', 35-2*rank)+': '), qtyfrom v_title_rankorder by rankGO
Hasil:
Book                                          qty--------------------------------------------- -----------  MC2222                                 :    10    BU1032                               :    15    BU7832                               :    15    PS3333                               :    15          TC4203                         :    20          TC7777                         :    20          PS1372                         :    20                BU1111                   :    25                PS7777                   :    25                PS2106                   :    25                      PC1035             :    30                        BU2075           :    35                          MC3021         :    40                          TC3218         :    40                              PC8888     :    50                                PS2091   :    108(16 row(s) affected) 
back to the top
prodsql bergabung dengan peringkat format query

Warning: This article has been translated automatically

Properti

ID Artikel: 186133 - Tinjauan Terakhir: 10/09/2013 05:44:00 - Revisi: 3.0

  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 4.21a Standard Edition
  • Microsoft SQL Server 6.0 Standard Edition
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • kbsqlsetup kbhowtomaster kbmt KB186133 KbMtid
Tanggapan