Как SELECT TOP с ORDER BY в DERIVED TABLE работает в Sybase ASE?

Мне было интересно, как этот запрос выполняется:

Я получил сообщение об ошибке "В производной таблице не разрешено BYDclause ORDER". то же самое, используя TOP.

НЕ РАБОТА:

SELECT
    count(*),
    sum(a_metric_1),
    a_fld_1
FROM
    (
        SELECT
            sales AS a_metric_1,
            product AS a_fld_1
        FROM
            bi_sales
    ) sel1
INNER JOIN (
    SELECT
        TOP 10 product AS b_fld_1
    FROM
        bi_sales
    GROUP BY
        product
    ORDER BY
        sum(sales) DESC
) sel2 ON sel1.a_fld_1 = sel2.b_fld_1
GROUP BY
    a_fld_1
ORDER BY
    a_fld_1

SELECT работает индивидуально, но не работает в производной таблице.

РАБОТА:

SELECT
    TOP 10 product AS b_fld_1
FROM
    bi_sales
GROUP BY
    product
ORDER BY
    sum(sales) DESC

Мне нужно запустить SQL, используя производную таблицу с функциями ORDER BY и TOP. Поскольку я работаю с программным обеспечением для создания кода PHP, это RAD. Таким образом, пользователь должен сообщить свой собственный SQL, может быть простым или сложным.

Представьте себе, что sel1 может быть другим комплексом SQL с JOIN, CASES ...

Таким образом, мы рассматриваем пользовательский SQL как "sel1". Мы отвечаем, используя TOP ORDER BY с "sel2", а затем делаем новый внешний SELECT со сравнительным JOIN в "sel1" и "sel2".

На Sybase не работают:

SELECT column FROM ( SELECT top 10 column2 FROM table ORDER BY column2 )

Тот же оператор работает на MS SQL Server, MySQL, Oracle, MS Access, PostgreSQL, SQLite, Firebird и Informix.

Заранее спасибо за ваши ответы!

1 ответ

В вашем случае, возможно, это то, что вы хотите:

SELECT TOP 10 product AS b_fld_1, SUM(sales), COUNT(*)
FROM bi_sales
GROUP BY product
ORDER BY sum(sales) DESC;

Это намного проще.

Я думаю, вам следует переместить предложение order by в самый внешний запрос

    SELECT A.column FROM ( SELECT top 10 column2 FROM table ) A
    ORDER BY A.column2
Другие вопросы по тегам