使用一列中的SELECT TOP,然后在不同的列上进行排序

Kip*_*Kip 2 sql-server syntax subquery

我正在使用SQL Server 2005,我想查询产生最多收入的供应商,按供应商的名称排序.以下是我试过的查询.内部子查询获得按收入排序的15个最大供应商,我尝试按供应商名称订购这些结果.

SELECT Revenue, VendorName
FROM (
  SELECT TOP 15
         SUM(po.POTotal) AS Revenue
       , Vendors.VendorName AS VendorName
  FROM PurchaseOrders po
  INNER JOIN Vendors ON po.Vendor_ID = Vendors.Vendor_ID
  WHERE ...
  GROUP BY Vendors.VendorName
  ORDER BY Revenue DESC
)
ORDER BY VendorName ASC
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误信息:

消息156,级别15,状态1,行14
关键字"ORDER"附近的语法不正确.

还有另一种方法吗?我认为这可能是一种观点,但我宁愿不这样做.


如果这是重复的话我很抱歉,我甚至不知道要搜索什么,看看是否已经被问过.

Cha*_*ana 8

为子查询添加别名:

SELECT Revenue, VendorName
FROM (SELECT TOP 15         
        SUM(po.POTotal) AS Revenue, 
        v.VendorName AS VendorName  
      FROM PurchaseOrders po  
        JOIN Vendors v 
          ON po.Vendor_ID = v.Vendor_ID 
      WHERE ... 
      GROUP BY v.VendorName  
      ORDER BY Revenue DESC) Z
ORDER BY VendorName ASC
Run Code Online (Sandbox Code Playgroud)


Aar*_*and 5

您需要为派生表提供别名:

  ...
  ORDER BY Revenue DESC
) AS DerivedTable
ORDER BY VendorName;
Run Code Online (Sandbox Code Playgroud)