Эквивалентный из RowID Oracle в SQL Server

public static void MoveUpOrDownSelectedItem(ListBox LisBox, bool MoveUp)
 {
          if (LisBox.SelectedIndex > 0 && MoveUp)
          {
             // add a duplicate item up in the listbox
             LisBox.Items.Insert(LisBox.SelectedIndex - 1, LisBox.SelectedItem);
             // make it the current item
             LisBox.SelectedIndex = (LisBox.SelectedIndex - 2);
             // delete the old occurrence of this item
              LisBox.Items.RemoveAt(LisBox.SelectedIndex + 2);
          }
        if ((LisBox.SelectedIndex != -1) && (LisBox.SelectedIndex < LisBox.Items.Count- 1) && MoveUp == false)     
        {
            // add a duplicate item down in the listbox
            int IndexToRemove = LisBox.SelectedIndex;
            LisBox.Items.Insert(LisBox.SelectedIndex + 2, LisBox.SelectedItem);
            // make it the current item
            LisBox.SelectedIndex = (LisBox.SelectedIndex + 2);
            // delete the old occurrence of this item
            LisBox.Items.RemoveAt(IndexToRemove);
        }
    }
78
задан John Saunders 4 August 2009 в 13:38
поделиться

4 ответа

Если вы хотите однозначно идентифицировать строку в таблице, а не свой набор результатов, вам нужно использовать что-то вроде столбца IDENTITY. См. «Свойство IDENTITY» в справке SQL Server. SQL Server не создает автоматически идентификатор для каждой строки в таблице, как это делает Oracle, поэтому вам придется создать собственный столбец идентификатора и явно получить его в своем запросе.

EDIT: для динамическую нумерацию строк набора результатов см. ниже, но это, вероятно, было бы эквивалентом ROWNUM Oracle, и я предполагаю, что из всех комментариев на странице вы хотите, чтобы материал был выше. Для SQL Server 2005 и более поздних версий вы можете использовать новую функцию Ranking Functions для достижения динамической нумерации строк.

Например, я делаю это по моему запросу:

select row_number() over (order by rn_execution_date asc) as 'Row Number', rn_execution_date as 'Execution Date', count(*) as 'Count'
from td.run
where rn_execution_date >= '2009-05-19'
group by rn_execution_date
order by rn_execution_date asc

Вы получите:

Row Number  Execution Date           Count
----------  -----------------        -----
1          2009-05-19 00:00:00.000  280
2          2009-05-20 00:00:00.000  269
3          2009-05-21 00:00:00.000  279

На support.microsoft.com есть также статья о динамической нумерации строк.

9
ответ дан 24 November 2019 в 10:33
поделиться

Ознакомьтесь с новой функцией ROW_NUMBER . Это работает так:

SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE
8
ответ дан 24 November 2019 в 10:33
поделиться

Из http://vyaskn.tripod.com/programming_faq.htm#q17 :

Oracle имеет rownum для доступа к строкам таблицы с использованием номера строки или идентификатор строки. Есть ли аналог этого в SQL Server? Или как сгенерировать вывод с номером строки в SQL Server?

В SQL нет прямого эквивалента rownum или идентификатора строки Oracle Сервер. Строго говоря, в реляционной базе данных строки внутри table не упорядочены, и идентификатор строки действительно не имеет смысла. Но если ты Если вам нужна эта функция, рассмотрите следующие три альтернативы:

  • Добавьте столбец IDENTITY в вашу таблицу.

  • Используйте следующий запрос, чтобы сгенерировать номер строки для каждой строки. Следующий запрос генерирует номер строки для каждой строки авторов. таблица базы данных пабов. Чтобы этот запрос работал, таблица должна иметь уникальный ключ.

     SELECT (SELECT COUNT (i.au_id) 
     ИЗ пабов .. авторов i 
     ГДЕ i.au_id> = o.au_id) КАК RowID, 
     au_fname + '' + au_lname AS 'Имя автора'
    ИЗ пабов .. авторов о
    ЗАКАЗАТЬ ПО RowID
    
  • Используйте метод временной таблицы, чтобы сохранить весь набор результатов во временной таблице вместе с идентификатором строки, сгенерированным функцией IDENTITY () функция. Создание временной таблицы будет дорогостоящим, особенно если вы работаете с большими таблицами. Используйте этот подход, если вы этого не сделаете иметь уникальный ключ в вашей таблице.

3
ответ дан 24 November 2019 в 10:33
поделиться
3777343-

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

SELECT row_number() OVER (order by getdate()) as ROWID, * FROM Employees
3
ответ дан 24 November 2019 в 10:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: