Как 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