-1

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

我收到错误消息“派生表中不允许使用 ORDER BYclause。” 同样使用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、CASES 的 SQL 复合体......

因此,我们将用户 SQL 视为“sel1”。我们使用带有“sel2”的 TOP ORDER BY 进行回复,然后在“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。

提前感谢您的回复 !

4

2 回答 2

0

就您而言,也许这可以满足您的要求:

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

它要简单得多。

于 2017-05-24T02:39:16.740 回答
0

我认为,您应该在最外面的查询中移动 order by 子句

    SELECT A.column FROM ( SELECT top 10 column2 FROM table ) A
    ORDER BY A.column2
于 2019-12-17T03:02:33.263 回答