SELECT TOP with ORDER BY into DERIVED TABLE 如何在 Sybase ASE 中



我想知道这个查询是如何执行的:

我收到错误消息"派生表中不允许使用 ORDER BY子句",与使用 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

我需要使用带有 ORDER BY 和 TOP 函数的派生表运行 SQL。因为我使用开发软件来生成PHP代码,所以它是一个RAD。所以用户应该通知你自己的SQL,可以是简单的,也可以是复杂的。

想象一下"sel1",它可能是另一个带有JOIN的SQL复合体,CASES...

因此,我们将用户 SQL 视为"sel1"。我们使用 TOP ORDER BY 和 "sel2" 进行回复,然后在 "sel1" 和 "sel2" 中用比较 JOIN 创建一个新的外部 SELECT。

在Sybase上不起作用:

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

相同的语句适用于MS SQL Server,MySQL,Oracle,MS Access,PostgreSQL,SQLite,Firebird和Informix。

提前感谢您的回复!

在您的情况下,也许这可以满足您的需求:

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

这要简单得多。

我认为,您应该在最外层查询处移动顺序 by 子句

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

最新更新