Эмулировать сгруппировать, упорядочить, ограничить от MySQL до MS SQL 2000 - PullRequest
3 голосов
/ 26 октября 2011

У меня есть запрос в MySQL:

select slscod,slsname,brc
from td_casa
group by slscod
order by slsname
limit 0,100

Этот запрос возвращает 100 лучших уникальных торговых кодов с slsname и brc, упорядоченными по возрастанию slsname.

Как изменить этот запрос в MSSQL 2000?

Ответы [ 3 ]

3 голосов
/ 26 октября 2011

Основной синтаксис:

select top 100 slscod,slsname,brc 
from td_casa 
group by slscod 
order by slsname
2 голосов
/ 26 октября 2011
SELECT TOP 100 slscod, slsname, brc
FROM td_casa
GROUP BY slscod, slsname, brc
ORDER BY slsname

Примечание: относительно вашего комментария о Недопустимый столбец xyz в ошибке select ... Я заметил, что вы выбирали 3 столбца, но указали 1 столбец в предложении GROUP BY. Это специфичное для MySQL поведение, как описано здесь :

MySQL расширяет использование GROUP BY для разрешения выбора полей, которые не упоминается в предложении GROUP BY. Если вы не получаете результаты, которые вы ожидаете от вашего запроса, пожалуйста, прочитайте описание GROUP BY находится в Разделе 11.15, «Функции и модификаторы для использования» с предложениями GROUP BY ".

0 голосов
/ 27 октября 2011

, потому что в MSSQL 2000 не поддерживается ROW_NUMBER() и LIMIT ... OFFSET .. наконец, я нашел этот запрос:

SELECT slscod, MIN(slsname) slsname, MIN(brc) brc FROM (
    SELECT top 30 slscod, MIN(slsname) slsname, MIN(brc) brc FROM
    (
        SELECT TOP (1*30) slscod, MIN(slsname) slsname, MIN(brc) brc
        FROM td_casa group by slscod
        ORDER BY slsname ASC
    ) AS t1 group by slscod
     ORDER BY slsname DESC ) AS t2 group by slscod ORDER BY MIN(slsname) ASC

То же самое, если в MySQL:

select slscod,slsname,brc from td_casa group by slscod order by slsname limit 0,30

если вы измените TOP (2*30) это то же самое limit 30,30. TOP (3*30) это тот же limit 60,30 и т. Д.

отчаянно нуждается в усилиях. спасибо всем. Лета ура

...