如何在Sql server 2000中生成RowID而不使用身份列

发布于 2024-11-17 13:55:52 字数 424 浏览 0 评论 0原文

让我提出我的问题......

我已经说过

Name

A
B
C
A
D
B

我想要的是

ID   Name
1    A
2    B
3    C
4    A
5    D
6    B

如果我写 SELECT name, (SELECT COUNT(*) FROM @t AS i2 WHERE i2.Name <= i1.Name) As rn FROM @t AS i1

如果所有名称都不同,它将正常工作/独特...如果它们不是(如本例所示),

即使 NEWID() 也无法解决问题,因为它会随着时间的推移而变化?

我正在使用 sql server 2000...

请帮助

Let me frame my question ....

I have say

Name

A
B
C
A
D
B

What I want is

ID   Name
1    A
2    B
3    C
4    A
5    D
6    B

If I write
SELECT name, (SELECT COUNT(*) FROM @t AS i2 WHERE i2.Name <= i1.Name) As rn FROM @t AS i1

it will work fine if all the names are distinct/unique...What if they are not(as in this example)

Even NEWID() does not make the trick as it varies overtime?

I am using sql server 2000...

Please help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

¢好甜 2024-11-24 13:55:52

这里有2种解决方法

1.

DECLARE @t TABLE ([ID] [int] IDENTITY(1,1), name CHAR)
INSERT @t VALUES ('b')
INSERT @t VALUES ('a')
INSERT @t VALUES ('c')
INSERT @t VALUES ('b')

SELECT * FROM @t

2.

DECLARE @t2 TABLE (name CHAR)
INSERT @t2 (name) VALUES ('b')
INSERT @t2 (name) VALUES ('a')
INSERT @t2 (name) VALUES ('c')
INSERT @t2 (name) VALUES ('b')

SELECT ID = ROW_NUMBER() OVER (ORDER BY b), name 
FROM (SELECT name, null b FROM @t2) temp

Here are 2 ways of solving it

1.

DECLARE @t TABLE ([ID] [int] IDENTITY(1,1), name CHAR)
INSERT @t VALUES ('b')
INSERT @t VALUES ('a')
INSERT @t VALUES ('c')
INSERT @t VALUES ('b')

SELECT * FROM @t

2.

DECLARE @t2 TABLE (name CHAR)
INSERT @t2 (name) VALUES ('b')
INSERT @t2 (name) VALUES ('a')
INSERT @t2 (name) VALUES ('c')
INSERT @t2 (name) VALUES ('b')

SELECT ID = ROW_NUMBER() OVER (ORDER BY b), name 
FROM (SELECT name, null b FROM @t2) temp
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文