Αυτήν τη στιγμή είστε εκτός σύνδεσης, σε αναμονή για επανασύνδεση στο Internet
Είσοδος

Το πρόγραμμα περιήγησής σας δεν υποστηρίζεται

Πρέπει να ενημερώσετε το πρόγραμμα περιήγησης για να χρησιμοποιήσετε την τοποθεσία.

Κάντε ενημέρωση στην πιο πρόσφατη έκδοση του Internet Explorer

Τρόπος δυναμικά αριθμός γραμμών σε μια πρόταση Transact-SQL ΕΠΙΛΈΞΤΕ

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.

Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:186133
Περίληψη
Αυτό το άρθρο περιγράφει τον τρόπο κατάταξης δυναμικά γραμμές όταν εκτελέσετε μια εντολή SELECT χρησιμοποιώντας ευέλικτη μέθοδος, η οποία μπορεί να είναι το μόνο πιθανή λύση και τα οποία είναι ταχύτερη από τη λύση. Γραμμή αρίθμηση ή κατάταξη είναι τυπική διαδικαστικές ζήτημα. Οι λύσεις είναι συνήθως με βάση τις επαναλήψεις και προσωρινούς πίνακες κατά συνέπεια, βασίζεται σε SQL Server επαναλήψεις και δρομείς. Αυτή η τεχνική βασίζεται σε ένα σύνδεσμο auto. Τα επιλεγμένα η σχέση είναι συνήθως "είναι μεγαλύτερη από". Μετρήστε πόσες φορές κάθε στοιχείο από ένα συγκεκριμένο σύνολο δεδομένων ικανοποιεί τη σχέση "είναι μεγαλύτερη από" όταν το σύνολο συγκρίνεται στον εαυτό του.

ΣΗΜΕΙΩΣΗ Τα παρακάτω παραδείγματα βασίζονται σε το pubs βάση δεδομένων. Από προεπιλογή, το Northwind δείγμα βάσης δεδομένων και το pubs δείγμα βάσης δεδομένων που έχουν εγκατασταθεί στον SQL Server 2005. Αυτές οι βάσεις δεδομένων μπορεί να ληφθεί από το Κέντρο λήψης της Microsoft. Για περισσότερες πληροφορίες, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:Μετά τη λήψη του SQL2000SampleDb.msi, εξαγάγετε τα δείγματα δεσμών ενεργειών βάσης δεδομένων, κάνοντας διπλό κλικ στο SQL2000SampleDb.msi. Από προεπιλογή, SQL2000SampleDb.msi θα εξαγάγετε δέσμες ενεργειών βάσης δεδομένων και το αρχείο readme στον ακόλουθο φάκελο:
C:\SQL Server 2000 δείγματα βάσεων δεδομένων
Ακολουθήστε τις οδηγίες στο αρχείο readme για να εκτελέσετε δέσμες ενεργειών εγκατάστασης.

Εάν χρησιμοποιείτε SQL Server 2005

Σας συνιστούμε να χρησιμοποιήσετε συναρτήσεις κατάταξης που παρέχονται ως μια νέα δυνατότητα του SQL Server 2005. Για περισσότερες πληροφορίες σχετικά με τις συναρτήσεις κατάταξης, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft Developer Network (MSDN) στο Web:back to the top

Παράδειγμα 1

Σε αυτό το παράδειγμα:
  • Σύνολο 1 είναι οι συντάκτες.
  • Σύνολο 2 είναι οι συντάκτες.
  • Η σχέση είναι "και το επώνυμο είναι μεγαλύτερες από."
  • Μπορείτε να αποφύγετε διπλές πρόβλημα συγκρίνοντας την πρώτη + τελευταία πρώτα ονόματα στην άλλη + τελευταία ονόματα.
  • Μετρήστε πόσες φορές η σχέση πληρούνται από Οι συναρτήσεις Count(*).
Ερώτημα:
   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				
Χρησιμοποιήστε τον ακόλουθο κώδικα στο 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 
Αποτέλεσμα:
   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

Παράδειγμα 2

Σε αυτό το παράδειγμα:
  • Κατάταξης καταστήματα από τον αριθμό των βιβλίων που πωλούνται.
  • Σύνολο 1 είναι ο αριθμός των βιβλίων που πωλούνται από χώρο αποθήκευσης: Επιλέξτε καταστήματος, QTY=SUM(QTY) από την ομάδα πωλήσεων από καταστήματος.
  • Σύνολο 2 είναι ο αριθμός των βιβλίων που πωλούνται από χώρο αποθήκευσης: Επιλέξτε καταστήματος, QTY=SUM(QTY) από την ομάδα πωλήσεων από καταστήματος.
  • Η σχέση είναι "ο αριθμός των βιβλίων είναι μεγαλύτερος από."
  • Για να αποφύγετε τις διπλότυπες εγγραφές, μπορείτε να (ως παράδειγμα) συγκρίνετε τιμή * ποσότητα αντί Ποσ.
Ερώτημα:
   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				
Αποτέλεσμα:
   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)				
ΣΗΜΕΙΩΣΗ Οι τιμές του Ποσ. στήλη είναι εσφαλμένες. Ωστόσο, η κατάταξη των χώρων αποθήκευσης με βάση την ποσότητα των βιβλίων που πωλούνται είναι σωστή. Αυτή είναι μια ατέλεια αυτή τη μέθοδο. Μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο για να επιστρέψετε την κατάταξη των χώρων αποθήκευσης, εάν δεν ενδιαφέρονται για την ποσότητα λάθος στο αποτέλεσμα.

Χρησιμοποιήστε τον ακόλουθο κώδικα στο 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
Αποτέλεσμα:
rank     stor_id  qty-------  -------  ------1        7131     1302        7066     1253        7067     904        8042     805        7896     606        6380     8(6 row(s) affected)
ΣΗΜΕΙΩΣΗ Στον SQL Server 2005, μπορείτε να λάβετε το σωστό αποτέλεσμα την κατάταξη και την ποσότητα όταν χρησιμοποιείτε συναρτήσεις κατάταξης.

back to the top

Παράδειγμα 3

Σε αυτό το παράδειγμα:
  • Κατάταξη των εκδοτών από τους εσόδων.
  • Σύνολο 1 είναι το σύνολο των πωλήσεων από εκδότη:
            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					
  • Σύνολο 2 είναι το σύνολο των πωλήσεων από εκδότη:
            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					
  • Η σχέση είναι "αποφέρει περισσότερα χρήματα από".
Ερώτημα:
   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				
Αποτέλεσμα:
   Rank     Pub_Id   Sales   ----     ------   --------   1         0736    1,961.85   2         0877    4,256.20   3         1389    7,760.85   (3 row(s) affected)				
ΣΗΜΕΙΩΣΗ Οι τιμές του Πωλήσεις στήλη είναι εσφαλμένες. Ωστόσο, η κατάταξη των εκδοτών βάσει των εσόδων είναι σωστή.

Χρησιμοποιήστε τον ακόλουθο κώδικα στο 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
Αποτέλεσμα:
rank     pub_id  sales-------  ------  ---------1        1389    2586.952        0877    2128.103        0736    1961.85(3 row(s) affected)				
ΣΗΜΕΙΩΣΗ Λαμβάνετε το σωστό αποτέλεσμα την κατάταξη και κερδίζοντας όταν χρησιμοποιείτε συναρτήσεις κατάταξης.

back to the top

Μειονεκτήματα

  • Εξαιτίας της σταυροειδή σύνδεσμο, αυτό δεν έχει σχεδιαστεί για εργασία με μεγάλο αριθμό γραμμών. Λειτουργεί καλά για εκατοντάδες γραμμές. Σε μεγάλα πίνακες, βεβαιωθείτε ότι χρησιμοποιείτε το ευρετήριο για να αποφύγετε μεγάλες σαρώσεις.
  • Δεν λειτουργεί καλά με διπλότυπες τιμές. Όταν κάνετε Συγκρίνετε τις διπλότυπες τιμές, Ασυνεχείς σειρά αρίθμησης που παρουσιάζεται. Εάν αυτό δεν είναι η συμπεριφορά που θέλετε, μπορείτε να αποφύγετε την αποκρύπτοντας κατάταξης στήλη όταν κάνετε Εισαγάγετε το αποτέλεσμα σε ένα υπολογιστικό φύλλο. Χρησιμοποιήστε αρίθμηση υπολογιστικού φύλλου αντί για αυτό.

    ΣΗΜΕΙΩΣΗ Εάν χρησιμοποιείτε SQL Server 2005, μπορείτε να χρησιμοποιήσετε το row_number() συνάρτηση επιστρέφει το διαδοχικό αριθμό μια γραμμή, ανεξάρτητα από τις διπλές σειρές.
Παράδειγμα:
   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
Αποτέλεσμα:
   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

Παροχές

  • Μπορείτε να χρησιμοποιήσετε αυτά τα ερωτήματα, προβολές και αποτέλεσμα μορφοποίηση.
  • Να μετατοπιστούν περισσότερες να κατατάσσονται κάτω δεδομένων του δεξιά.
Παράδειγμα 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				
Ερώτημα:
   select  publisher=convert(varchar(20),replicate (' ', power(2,rank)) +           pub_id +           replicate(' ', 15-power(2,rank))+': '),           earnings=qty   from v_pub_rank				
Αποτέλεσμα:
   Publisher       Earnings   -------------   --------     0736          : 1,961.85       0877        : 4,256.20           1389    : 7,760.85				
Χρησιμοποιήστε τον ακόλουθο κώδικα στο 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
Αποτέλεσμα:
publisher            earnings-------------------- ---------------------  0736             : 1961.85    0877           : 2128.10        1389       : 2586.95(3 row(s) affected)

Παράδειγμα 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				
Ερώτημα:
   select  Book=convert(varchar(45),replicate (' ', 2*rank) +           title_id +           replicate(' ', 35-2*rank)+': '),           qty   from v_title_rank   order by rank				
Αποτέλεσμα:
   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)				
Χρησιμοποιήστε τον ακόλουθο κώδικα στο 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
Αποτέλεσμα:
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 συνδέσμου κατάταξης μορφοποίησης ερωτήματος

Προειδοποίηση: Αυτό το άρθρο έχει μεταφραστεί με μηχανική μετάφραση

Ιδιότητες

Αναγνωριστικό άρθρου: 186133 - Τελευταία αναθεώρηση: 09/17/2011 18:45:00 - Αναθεώρηση: 5.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 KbMtel
Σχόλια
>ow.location.protocol) + "//c.microsoft.com/ms.js'><\/script>");