0

如果我有这个小提琴

CREATE TABLE temp
(
y          char(9),
x          char(9)
);

insert into temp (x, y) values ('j', 'hello');
insert into temp (x, y) values ('j', 'world');
insert into temp (x, y) values ('q', 'foo');
insert into temp (x, y) values ('q', 'bar');

select 
x
,y
from temp

我想在 SELECT 子句中包含一个行号。所以结果看起来像这样:

x y     r
j hello 1 
j world 2
q foo   3
q bar   4

我不相信 Row_number() over 会起作用,因为这需要一个订单,我不想从SELECT * FROM. 也不想在客户端数据库表中添加一个标识列

这在 SQL-Server 中可行吗?

4

1 回答 1

3

如果您可以r接受不确定性(换句话说,它可能不会每次都一样):

select 
x
,y
, r = ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
from temp
order by r;

即使是一个非常简单的情况,它也不能以同样的方式工作:

CREATE TABLE temp
(
y          char(9) PRIMARY KEY,
x          char(9)
);

当然,如果您希望订单是随机的:

select 
x
,y
, r = ROW_NUMBER() OVER (ORDER BY NEWID())
from temp
order by r;
于 2012-06-17T15:49:57.967 回答