sql server 2005でwith tiesの使用


今日、ある同僚はグループの中で、一度試験の最高点を求める良い方法があるかどうか、みんなは最初は軽蔑してあげました.
select top (1) * from table where examid=1 order by score desc
しかし、1分も待たないうちに、みんなは反応して、1つの問題があって、もし多くの人が最高点を打ったらどうしますか.もちろん複雑な文が必要です.
同僚の一人が
select top (1) with ties * from table where examid=1 order by score desc
面白い感じで、with tiesを使ったことがなくてちょうど研究してみました
with tiesの公式定義は
WITH TIES
基本結果セットから追加のローを返すことを指定します.ORDER BY列で指定したソート方法パラメータの場合、これらの追加の戻りローのパラメータ値はTOP n(PERCENT)行の最後のローのパラメータ値と同じです.SELECT文でのみ、ORDER BY句を指定した後にのみTOPを指定できます...WITH TIES.
注意:返されるレコードの関連付け順序は任意です.ORDER BYはこの規則に影響しません
出典:MSDN,http://msdn.microsoft.com/zh-cn/library/ms189463.aspx
次は実験をして、運行の結果を見てみました.
IF object_id('score') IS NOT NULL
 DROP TABLE score
 
 CREATE TABLE score
 (
   id int IDENTITY(1,1) PRIMARY KEY,
   CName varchar(30),
   StuCore int
     
)




INSERT INTO score(CName,stucore)values('A',100)
INSERT INTO score(CName,stucore)values('B',100)
INSERT INTO score(CName,stucore)values('C',60)
INSERT INTO score(CName,stucore)values('D',70)
INSERT INTO score(CName,stucore)values('E',50)
INSERT INTO score(CName,stucore)values('F',60)
INSERT INTO score(CName,stucore)values('G',70)
INSERT INTO score(CName,stucore)values('H',80)
INSERT INTO score(CName,stucore)values('i',40)
INSERT INTO score(CName,stucore)values('J',40)


UPDATE score SET stucore = 80 WHERE id=3

一つ目:SELECT TOP(5)CName,stucor FROM score ORDER BY stucore desc
結果:
B	100
A	100
C	80
H	80
D	70

    SELECT TOP (5) WITH tie CName,stucore FROM score ORDER BY stucore desc
結果:
A	100
B	100
C	80
H	80
G	70
D	70

これにより、1行増えたのは、正常な最後の行と同じで、70点を打った学生が2つになったことがわかります.これがwith tiesの役割です.
正直に言うと、with tiesが一番多いのは計算の最高点に使うべきだと思います.他の面での応用は、思いもよらなかったです.