Поддерживать порядок символов, если нет идентификатора (SQL Server 2005) - PullRequest
0 голосов
/ 19 ноября 2009

У меня есть следующее

Символы

A
C
W
B
J
M

Как я могу вставить некоторые последовательные числа, чтобы после вставки чисел порядок символов не изменился?

Я имею в виду, что если я использую row_number (), порядок вывода символов меняется как

select 
ROW_NUMBER() over(order by chars) as id,
t.* from @t t

Выход:

идентификаторы

1   A
2   B
3   C
4   J
5   M
6   W

Мое желаемое ожидание -

идентификаторы

1   A
2   C
3   W
4   B
5   J
6   M

Кроме того, я не могу использовать никакие поля идентификации, такие как id int identity, потому что я нахожусь в середине запроса и мне нужно поддерживать внутреннее соединение для достижения чего-либо.

Надеюсь, я проясню.

Пожалуйста, помогите. Заранее спасибо

1 Ответ

5 голосов
/ 19 ноября 2009

В SQL нет неявного упорядочения строк. Если требуется какой-либо порядок, будь то порядок, в котором элементы были вставлены, или любой другой порядок, он должен поддерживаться столбцом , определенным пользователем .

Другими словами, стандарт SQL не требует, чтобы реализации SQL поддерживали какой-либо порядок. С другой стороны, предложение ORDER BY в операторе SELECT может использоваться для указания желаемого порядка, но такое упорядочение поддерживается значениями в конкретном (опять же, определенном пользователем) столбце.

Этот пользовательский столбец вполне может быть столбцом с автоинкрементом, для которого 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'
--...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...