2017-01-31 101 views
1

Учитывая таблицу MY_TABLE в базе данных Sybase, состоящая из COLUMN_A, COLUMN_B, COLUMN_C, SORTER_COLUMN, я хочу, чтобы выбрать следующим образом:Как выбрать из таблицы с добавлением столбца последовательности?

SELECT COLUMN_A, COLUMN_B, SORTER_COLUMN, SEQUENCE 
FROM MY_TABLE 
WHERE COLUMN_C = 'SOMETHING' 
ORDER BY SORTER_COLUMN 

Где SEQUENCE представляет последовательность, отсортирован по SORTER_COLUMN -starting от 1, 2 , 3, ... и т. Д. Как я могу достичь этого в Sybase?

Раньше я вставлял записи в новую таблицу, содержащую столбец SEQUENCE, определяемый как IDENTIFIER. Но мне нужно решение для добавления последовательности непосредственно в выборку без необходимости вставки в таблицу.

ответ

1

Если вы используете более поздние версии Sybase (по крайней мере, версия 12), вы можете использовать либо NUMBER(*) функцию:

SELECT COLUMN_A, COLUMN_B, SORTER_COLUMN, Number(*) as SEQUENCE 
FROM MY_TABLE 
WHERE COLUMN_C = 'SOMETHING' 
ORDER BY SORTER_COLUMN 

или ROW_NUMBER() функцию

SELECT COLUMN_A, COLUMN_B, SORTER_COLUMN, ROW_NUMBER() OVER (ORDER BY SORTER_COLUMN) SEQUENCE 
FROM MY_TABLE 
WHERE COLUMN_C = 'SOMETHING' 
ORDER BY SORTER_COLUMN 

UPDATE:

As amy assin, прокомментированные ниже, обе вышеупомянутые функции не работают в Sybase 15.7, несмотря на то, что они задокументированы в спецификации. Поэтому единственный вариант у вас есть на мой взгляд, использовать коррелировать запрос, например:

SELECT b.COLUMN_A, b.COLUMN_B, b.SORTER_COLUMN, 
(select count(*)+1 from MY_TABLE a where a.SORTER_COLUMN < b.SORTER_COLUMN) as SEQUENCE 
FROM MY_TABLE b 
WHERE b.COLUMN_C = 'SOMETHING' 
ORDER BY b.SORTER_COLUMN 
+0

я. используя Sybase 15.7 'Adaptive Server Enterprise 15.7', но обе функции не поддерживаются. – amyassin

+1

Я добавил обходное решение. Проверьте обновленный ответ – cha

+0

Это абсолютно то, что мне нужно! Благодаря :) – amyassin

-1

Используйте локальную переменную, которая увеличивается для каждой строки. Инициализируйте его в предложении FROM, где вы должны указать ему псевдоним.

SELECT COLUMN_A, COLUMN_B, SORTER_COLUMN, (@n := @n + 1) AS SEQUENCE 
FROM MY_TABLE, (SELECT @n := 0) as WHATEVER; 
+0

Похоже [MySQL] Синтаксис – cha

+0

Возвращается ошибка: 'Неправильный синтаксис около«:»' – amyassin