SQL-запрос SQLServer со счетчиком строки

Я выполнял ту же проблему и выяснил, что проблема связана с компилятором mingw. Я попробовал исправления, предложенные @tharen, но это не сработало для меня.

Кажется, что любимый компилятор cygwin для Windows - это визуальный c ++, поэтому я загрузил только визуальные инструменты сборки c ++ из http : //landinghub.visualstudio.com/visual-cpp-build-tools , а затем он работал нормально.

Обратите внимание, что вам нужно удалить mingw и все ссылки на него, которые вы включили в ваш проект. В частности, мне пришлось удалить файл distutils.cfg, который я создал, который имел следующий код, указывающий на mingw

[build]
compiler = mingw32

21
задан andynormancx 29 January 2009 в 17:52
поделиться

2 ответа

Для начала, что-то вроде:

SELECT my_first_column, my_second_column,
    ROW_NUMBER() OVER (ORDER BY my_order_column) AS Row_Counter
FROM my_table

Однако важно отметить, что ROW_NUMBER() OVER (ORDER BY ...) конструкция только определяет значения Row_Counter, это не гарантирует упорядочивания результатов.

, Если SELECT самостоятельно не имеет явное ORDER BY пункт, результаты могли быть возвращены в любом порядке, зависящем от того, как SQL Server решает оптимизировать запрос. ( См. эту статью для большего количества информации .)

единственный способ гарантировать, что результаты будут всегда быть возвращенными в Row_Counter, порядок состоит в том, чтобы применить точно то же упорядочивание и SELECT и ROW_NUMBER():

SELECT my_first_column, my_second_column,
    ROW_NUMBER() OVER (ORDER BY my_order_column) AS Row_Counter
FROM my_table
ORDER BY my_order_column  -- exact copy of the ordering used for Row_Counter

вышеупомянутый шаблон будет всегда возвращать результаты в правильном порядке и работает хорошо на простые запросы, но что относительно "произвольно сложного" запроса с, возможно, десятками выражений в ORDER BY пункт? В тех ситуациях я предпочитаю что-то вроде этого вместо этого:

SELECT t.*
FROM
(
    SELECT my_first_column, my_second_column,
        ROW_NUMBER() OVER (ORDER BY ...) AS Row_Counter  -- complex ordering
    FROM my_table
) AS t
ORDER BY t.Row_Counter

Используя вложенный запрос означает, что нет никакой потребности копировать сложное ORDER BY пункт, что означает меньше помехи и более легкого обслуживания. Внешнее ORDER BY t.Row_Counter также делает намерение запроса намного более ясным Вашим поддерживающим разработчикам.

26
ответ дан 29 November 2019 в 20:59
поделиться

В SQL Server 2005 и, можно использовать ROW_NUMBER() функция, которая имеет опции для порядка сортировки и групп, по которым количества сделаны (и сброшены).

10
ответ дан 29 November 2019 в 20:59
поделиться
Другие вопросы по тегам:

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