当前位置: 首页 > 知识库问答 >
问题:

可以向与顺序无关的SELECT子句添加行号

太叔超英
2023-03-14
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
x y     r
j hello 1 
j world 2
q foo   3
q bar   4

我不相信Row_number()over会起作用,因为这需要顺序,而且我不想更改select*from的顺序。也不希望在客户端db表中添加标识列

这在SQL-Server中是可能的吗?

共有1个答案

谢昂雄
2023-03-14

如果您不介意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;
 类似资料:
  • 问题内容: 我正在从具有整数id值的大型表(数百万行)中选择一组帐户记录。从某种意义上说,查询是最基本的。我正在做的是建立一个大型的逗号分隔列表,并将其作为“ in”子句传递到查询中。现在,结果是完全无序的。我想做的是按“ in”子句中的值顺序返回结果。 我想我将不得不建立一个临时表并进行联接,这是我想避免的,但可能无法做到。 有什么想法吗?现在,由于我们正试图限制输出大小,每个查询的大小上限为6

  • 问题内容: 我想在查询中添加一个子句,但 有条件地 。具体来说,我只希望在URL中传递单独的querystring参数时才添加它。这可能吗?如果可以,我将如何去做呢? 问题答案: 您可以将查询存储在变量中,应用条件where子句,然后执行它,如下所示:

  • 问题内容: 这个问题与执行顺序无关。这只是关于ORDER BY。 在标准执行中是: FROM WHERE GROUP BY HAVING SELECT ORDER BY TOP 编辑:这个问题或多或少是“ 执行ORDER BY表达式时SQL Server是否应用短路评估吗? ”的答案是有时!我只是还没有找到一个合理的理由。参见编辑#4。 现在假设我有一个这样的声明: 这不是我要执行的真实语句,而只

  • 问题内容: 在MySQL中执行子句的预定义顺序是什么?它是否在运行时确定,并且此顺序正确吗? 问题答案: MySQL语句的实际执行有些棘手。但是,该标准确实指定了查询中元素解释的顺序。这基本上是在您指定的顺序,但我想和能来后: 条款 条款 条款 条款 条款 条款 这对于了解如何解析查询很重要。例如,您不能使用在子句中的定义的列别名,因为会在之前解析。另一方面,这样的别名可以在子句中。 至于实际执行

  • 问题内容: 在SQL Server中,这会将来自Customers表的100条记录插入到tmpFerdeen中: 是否可以跨UNION ALL SELECT进行SELECT INTO:- 不太确定在哪里添加INTO子句。 问题答案: 这在SQL Server中有效: