2009-11-19 3 views
0

У меня есть следующиеПоддерживать порядок символов, если нет идентификатор (SQL Server 2005)

CHARS

A 
C 
W 
B 
J 
M 

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

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

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

Выхода:

ID символы

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

Моего желаемое ожидания

ID символы

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

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

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

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

+0

Где упорядочение гольцов как A C W B J M взялось? –

+0

вам нужна какая-то форма идентификатора или дата/метка времени, чтобы получить заказ –

ответ

5

В 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' 
--... 
+0

Привет, infact это то, что я сказал, что результат, который я представил здесь, является результатом некоторого запроса. У меня нет таблицы как таковой, где присутствуют эти данные. Впредь я не могу использовать столбец идентификаторов. –

+0

Вы можете использовать что-то вроде 'SELECT ROW_NUMBER() OVER (ORDER BY GETDATE()) AS id, t. * FROM @ tt' Это трюк, потому что GetDate() получает только один раз, и не должен изменять подразумеваемый порядок этой вещи @t ... Но, как сказано, если этот порядок не был явно необходим, вы не должны полагаться на него. t. * From @t t – mjv

+0

спасибо человеку ... даже я думал сделать, как выбрать 1 как rn, col из таблицы, а затем применитьinh row_number (более rn), чтобы добиться того же. –

Смежные вопросы