Momentálne ste offline a čaká sa, kým sa znova pripojíte na internet

Ako sa dynamicky číslovanie riadkov vo vyhlásení vyberte Transact-SQL

DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:186133
SUHRN
Tento článok popisuje dynamicky hodnosť riadkov, keď vykonať príkaz SELECT pomocou pružná metóda, ktorá môže byť len možné riešenie a ktoré je rýchlejšie ako procesné roztoku. Riadok číslovanie alebo poradie je typické procesnej otázke. Riešenia, ktoré sú zvyčajne na základe slučky a dočasným tabuľkám; preto sú založené na serveri SQL Server slučky a kurzorov. Táto technika je založená na auto pripojiť. Vybraný vzťah je zvyčajne "je väčšia ako." Počítať, koľkokrát každý prvok najmä množiny údajov napĺňa vzťah "je väčšia ako" keď súbor je v porovnaní s sama.

Poznámka: Nasledujúce príklady sú založené na krčmy databáza. V predvolenom nastavení Northwind Ukážková databáza a krčmy Ukážková databáza nie sú nainštalované v SQL Server 2005. Týchto databáz možno stiahnuť z Preberacieho centra spoločnosti Microsoft. Pre viac informácií, navštívte nasledovnú webovú lokalitu spoločnosti Microsoft:Po prevzatí SQL2000SampleDb.msi, extraktu vzorky databázy skripty dvojitým kliknutím na SQL2000SampleDb.msi. V predvolenom nastavení SQL2000SampleDb.msi bude Extrahovať databázu skripty a súbor readme do nasledujúceho priečinka:
C:\SQL Server 2000 ukážkové databázy
Postupujte podľa pokynov v súbore readme spustiť inštalačné skripty.

Ak používate SQL Server 2005

Odporúča sa použiť poradie funkcií, ktoré sú poskytované ako nová funkcia programu SQL Server 2005. Ďalšie informácie o funkciách poradie na webovej lokalite Microsoft Developer Network (MSDN):back to the top

Príklad 1

V tomto príklade:
  • 1 Je autorov.
  • Súbor 2 je autorov.
  • Vzťah je "priezviská a mená sú väčšie ako."
  • Vyhnete sa duplicitné problém porovnaním prvý + posledného mená na druhý prvých + posledného mená.
  • Spočítať počet krát vzťah je splniť Count(*).
Služba 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				
Použite nasledujúci kód v 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 
Výsledok:
   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

Príklad 2

V tomto príklade:
  • Hodnosť obchodoch prostredníctvom počet kníh predaných.
  • 1 Je počet kníh predaných skladu: vyberte stor_id, QTY=SUM(QTY) z predaja Zoskupiť podľa stor_id.
  • Súbor 2 je počet kníh predaných skladu: vyberte stor_id, QTY=SUM(QTY) z predaja Zoskupiť podľa stor_id.
  • Vzťah je "počet kníh je väčší ako."
  • Aby sa zabránilo duplicite, môžete (ako príklad) porovnať cena * Množ. namiesto z Množ.
Služba 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				
Výsledok:
   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)				
Poznámka: Hodnoty v Množ. stĺpec sú nesprávne. Rebríček obchody na základe množstva knihy predávané je však správne. Toto je nedostatok tejto metódy. Túto metódu môžete použiť vrátiť rebríčku skladov, ak nemusíte starostlivosti o zle množstvo vo výsledku.

Použite nasledujúci kód v 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
Výsledok:
rank     stor_id  qty-------  -------  ------1        7131     1302        7066     1253        7067     904        8042     805        7896     606        6380     8(6 row(s) affected)
Poznámka: V SQL Server 2005, môžete získať správny výsledok poradie a množstvo pri použití funkcie rebríčku.

back to the top

Príklad 3

V tomto príklade:
  • Hodnosť vydavatelia podľa ich zárobky.
  • 1 Je celkové tržby podľa vydavateľa:
            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					
  • Súbor 2 je celkové tržby podľa vydavateľa:
            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					
  • Vzťah je "zarobí viac peňazí, než."
Služba 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				
Výsledok:
   Rank     Pub_Id   Sales   ----     ------   --------   1         0736    1,961.85   2         0877    4,256.20   3         1389    7,760.85   (3 row(s) affected)				
Poznámka: Hodnoty v Predaj stĺpec sú nesprávne. Rebríček vydavateľov založené na zárobky je však správne.

Použite nasledujúci kód v 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
Výsledok:
rank     pub_id  sales-------  ------  ---------1        1389    2586.952        0877    2128.103        0736    1961.85(3 row(s) affected)				
Poznámka: Zobrazí sa správny výsledok poradie a zarábať pri použití funkcie rebríčku.

back to the top

Nevýhody

  • Z dôvodu krížové spojenie, to nie je určený pre prácu s veľkým počtom riadkov. Funguje to aj pre stovky riadkov. Na veľké tabuľky, uistite sa index sa používa na vyhnúť veľké sken.
  • To nefunguje dobre s duplicitné hodnoty. Keď ste porovnať duplicitné hodnoty, nesúvislých riadok číslovanie vyskytuje. Ak to nie je správanie, ktoré chcete, môžete sa vyhnúť to skrytím hodnosť stĺpec keď ste Vložiť výsledok v hárku; používať hárok číslovanie namiesto toho.

    Poznámka: Ak používate SQL Server 2005, môžete použiť row_number() Funkcia vrátiť poradové číslo riadku, bez ohľadu na duplicitných riadkov.
Príklad:
   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
Výsledok:
   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

Dávky

  • Môžete použiť tieto dotazov v zobrazení a výsledok formátovanie.
  • Môžete presunúť viac na dolnom-intravilánu údajov právo.
Príklad 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				
Služba Query:
   select  publisher=convert(varchar(20),replicate (' ', power(2,rank)) +           pub_id +           replicate(' ', 15-power(2,rank))+': '),           earnings=qty   from v_pub_rank				
Výsledok:
   Publisher       Earnings   -------------   --------     0736          : 1,961.85       0877        : 4,256.20           1389    : 7,760.85				
Použite nasledujúci kód v 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
Výsledok:
publisher            earnings-------------------- ---------------------  0736             : 1961.85    0877           : 2128.10        1389       : 2586.95(3 row(s) affected)

Príklad 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				
Služba Query:
   select  Book=convert(varchar(45),replicate (' ', 2*rank) +           title_id +           replicate(' ', 35-2*rank)+': '),           qty   from v_title_rank   order by rank				
Výsledok:
   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)				
Použite nasledujúci kód v 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
Výsledok:
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 join rank formátovania dotaz

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 186133 – Posledná kontrola: 10/19/2011 10:11:00 – Revízia: 2.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 Express Edition, Microsoft SQL 2005 Server Enterprise, Microsoft SQL Server 2005 Express Edition, Microsoft SQL 2005 Server Workgroup

  • kbsqlsetup kbhowtomaster kbmt KB186133 KbMtsk
Pripomienky