假設我有這樣的數據:每組選擇一行而不指定順序?
create table People (ID int identity, Name nvarchar(50), Age int);
insert into People values
('Bill Jones', 50),
('Bill Jones', 12),
('Sam Smith', 23),
('Jill Brown', 44),
('Jill Brown', 67),
('Jill Brown', 3)
而這個查詢:
select * from (
select
ID, Name, Age,
row_number() over (partition by Name order by ID) [rownum]
from People
) a where [rownum] = 1
它成功地返回我每唯一名稱一人。
ID NAME AGE ROWNUM
1 Bill Jones 50 1
4 Jill Brown 44 1
3 Sam Smith 23 1
但是爲了使用row_number()
,我都必須指定一個order by
,引起查詢計劃包括昂貴的排序操作。
我不關心返回其人;我只需要每個名字一個人。
有沒有辦法做到這一點沒有排序?
你可以在這裏看到我的查詢和執行計劃:http://sqlfiddle.com/#!3/3ee32/1/0
嘗試使用'order by 1/0',一個假的排序。它可能在QO上游戲足以放棄排序。 – RichardTheKiwi 2013-05-01 05:06:39
排序並不總是很昂貴,並且不相信查詢計劃中的%s。你也可以嘗試變種'選擇身份證號碼,姓名,年齡,身份證號碼(從姓名分組中選擇人名分鐘)(ID)' – RichardTheKiwi 2013-05-01 05:10:02
我認爲我實際上是個白癡......無論如何,爲了分割。更改爲'1/0的順序'確實會停止它通過ID *以及* Name排序。 – Blorgbeard 2013-05-01 05:17:09