2017-05-23 10 views
-1

Ich frage mich, wie diese Abfrage ausgeführt wird:Wie funktioniert SELECT TOP mit ORDER BY in DERIVED TABLE in Sybase ASE?

Ich habe die Fehlermeldung "Eine ORDER BYclause ist in einer abgeleiteten Tabelle nicht zulässig." dasselbe mit TOP.

nicht:

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 

individuell SELECT Arbeit, aber funktioniert nicht in einer abgeleitete Tabelle.

ARBEIT:

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

Ich brauche mit SQL abgeleitete Tabelle mit ORDER BY und TOP Funktionen auszuführen. Da ich mit Entwicklungssoftware arbeite, um PHP-Code zu generieren, handelt es sich um eine RAD. So sollte der Benutzer Ihr eigenes SQL informieren, kann einfach oder komplex sein.

Stellen Sie sich vor, dass „SEL1“, die eine andere SQL-Komplex sein kann, mit der JOIN FÄLLE ...

So haben wir den Benutzer SQL als „SEL1“ behandeln. Wir antworten mit dem TOP ORDER BY mit "sel2" und machen dann einen neuen externen SELECT mit Vergleichs-JOIN in "sel1" und "sel2".

Auf Sybase funktioniert nicht:

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

Die gleiche Aussage Arbeit auf MS SQL Server, MySQL, Oracle, MS Access, PostgreSQL, SQLite, Firebird und Informix.

Vielen Dank im Voraus für Ihre Antworten!

+1

Was ist die Frage? – artm

Antwort

0

In Ihrem Fall vielleicht tut es das, was Sie wollen:

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

Es ist viel einfacher.

Verwandte Themen