带有ORDER BY的SELECT TOP如何在Sybase ASE中使用DERIVED TABLE?

时间:2017-05-23 23:29:00

标签: sql sybase sybase-ase derived-table sybase-ase15

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

我收到错误消息“派生表中不允许使用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的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。

提前感谢您的回复!

2 个答案:

答案 0 :(得分:0)

在你的情况下,也许这就是你想要的:

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

这简单得多。

答案 1 :(得分:0)

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

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