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 が機能するとは思えません。これには Order が必要であり、SELECT * FROM. また、クライアントの db テーブルに ID 列を追加したくない

これは 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 に答える