pri*_*kar 0 t-sql sql-server sql-server-2005
我有以下内容
个字符
A
C
W
B
J
M
Run Code Online (Sandbox Code Playgroud)
如何插入一些序列号,以便在插入数字后字符的顺序不会改变?
我的意思是如果我使用row_number(),输出字符顺序就会改变
select
ROW_NUMBER() over(order by chars) as id,
t.* from @t t
Run Code Online (Sandbox Code Playgroud)
输出:
id chars
1 A
2 B
3 C
4 J
5 M
6 W
Run Code Online (Sandbox Code Playgroud)
我期望的期望是
id chars
1 A
2 C
3 W
4 B
5 J
6 M
Run Code Online (Sandbox Code Playgroud)
此外,我不能使用任何身份字段,id int identity
因为我在查询的中间,我需要维护内部联接以实现某些目标.
我希望我能清楚自己.
请帮忙.提前致谢
SQL中没有行的隐式排序.如果需要某些排序,无论是插入项目的顺序还是任何其他顺序,它都必须由用户定义的列支持.
换句话说,SQL标准不要求SQL实现维护任何顺序.另一方面,SELECT语句中的ORDER BY子句可用于指定所需的顺序,但特定(再次,用户定义)列中的值支持此类排序.
此用户定义列可能是一个自动递增的列,SQL为其分配增量(或其他)值,这可能是您需要的.
也许像...
CREATE TABLE myTable
(
InsertID smallint IDENTITY(1,1),
OneChar CHAR(1),
SomeOtherField VARCHAR(20)
-- ... etc.
)
INSERT INTO myTable (OneChar, SomeOtherField) VALUES ('A', 'Alpha')
INSERT INTO myTable (OneChar, SomeOtherField) VALUES ('W', 'Whiskey')
INSERT INTO myTable (OneChar, SomeOtherField) VALUES ('B', 'Bravo')
-- ... etc.
SELECT OneChar
FROM myTable
ORDER BY InsertId
'A'
'W'
'B'
--...
Run Code Online (Sandbox Code Playgroud)