次のサンプルコードをSQL Serverで実行すると、newid()が結合後にマテリアライズされ、row_number()が結合前にマテリアライズされることがわかります。誰もがこれを理解していて、それを回避する方法があるのでしょうか?なぜnewid()はクエリの最後に現れますか?
declare @a table (num varchar(10))
insert into @a values ('dan')
insert into @a values ('dan')
insert into @a values ('fran')
insert into @a values ('fran')
select *
from @a T
inner join
(select num, newid() id
from @a
group by num) T1 on T1.num = T.num
select *
from @a T
inner join
(select num, row_number() over (order by num) id
from @a
group by num) T1 on T1.num = T.num
私はCTEを見ません...? –
@pst:それは「匿名」だからです。 :-) –