Добавление номеров строк в результат запроса SELECT в SQL Server без использования функции Row_Number () - PullRequest
0 голосов
/ 30 октября 2009

Мне нужно добавить номера строк в запрос SELECT без использования функции Row_Number ().
и без использования пользовательских функций или хранимых процедур.

Select (obtain the row number) as [Row], field1, field2, fieldn from aTable

UPDATE

Я использую SAP B1 DIAPI, чтобы сделать запрос, эта система не позволяет использовать функцию rownumber () в операторе выбора.

Bye.

Ответы [ 3 ]

3 голосов
/ 30 октября 2009

Я не уверен, будет ли это работать для вашей конкретной ситуации или нет, но вы можете выполнить этот запрос с помощью хранимой процедуры? Если это так, вы можете:

A) Создайте временную таблицу со всеми вашими обычными столбцами результатов, а также столбцом Row в качестве идентификатора с автоинкрементом.

B) Выберите-Вставьте ваш оригинальный запрос, без строки столбца (SQL заполнит это автоматически для вас)

C) Выберите * в таблице временных показателей для набора результатов.

Не самое элегантное решение, но оно выполнит нумерацию строк, которую вы хотите.

2 голосов
/ 30 октября 2009

Этот запрос даст вам номер строки,

SELECT 
    (SELECT COUNT(*) FROM @table t2 WHERE t2.field <= t1.field) AS row_number,
    field,
    otherField
FROM @table t1

, но есть некоторые ограничения , когда вы хотите его использовать. В вашей таблице должен быть один столбец (в примере это field), который является уникальным и числовым, и вы можете использовать его в качестве справочного материала. Например:

DECLARE @table TABLE
(
    field INT,
    otherField VARCHAR(10)
)

INSERT INTO @table(field,otherField) VALUES (1,'a')
INSERT INTO @table(field,otherField) VALUES (4,'b')
INSERT INTO @table(field,otherField) VALUES (6,'c')
INSERT INTO @table(field,otherField) VALUES (7,'d')

SELECT * FROM @table

1010 * возвращается *

field | otherField
------------------
1     | a
4     | b
6     | c
7     | d

и

SELECT 
    (SELECT COUNT(*) FROM @table t2 WHERE t2.field <= t1.field) AS row_number,
    field,
    otherField
FROM @table t1

возвращает

row_number | field | otherField
-------------------------------
1          | 1     | a
2          | 4     | b
3          | 6     | c
4          | 7     | d

Это решение без функций и хранимых процедур, но, как я уже сказал, есть ограничения. Но в любом случае, может быть, вам этого достаточно.

1 голос
/ 30 октября 2009

RRUZ, вы можете скрыть использование функции, поместив ваш запрос в представление. Это было бы прозрачно для звонящего. Я не вижу других вариантов, кроме уже упомянутых.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...