【问题标题】:Cannot reference subquery column by outer order by无法按外部顺序引用子查询列
【发布时间】:2012-08-24 14:26:28
【问题描述】:

下面的ORDER BY 子句导致错误。如何引用 ORDER BY 子句中的 TotalPrice 列:

SELECT * FROM
(

SELECT O.OrderID,
       (SELECT SUM(SubTotal) FROM DB_OrderDetails OD WHERE OD.OrderID = O.OrderID) AS TotalPrice,
       ROW_NUMBER() OVER (ORDER BY TotalPrice) AS RowNum

    FROM DB_Orders O

) Orders

【问题讨论】:

  • 你能用英语解释一下你想做什么吗?似乎一件简单的事情变得复杂了。

标签: sql sql-server sql-order-by subquery


【解决方案1】:

你不能在同一个子查询中通过它的名字来引用它,你不能在外部查询中这样做:

SELECT orders.*, 
       ROW_NUMBER() OVER (ORDER BY TotalPrice) AS RowNum FROM
(
    SELECT O.OrderID,
       (SELECT SUM(SubTotal) FROM DB_OrderDetails OD 
        WHERE OD.OrderID = O.OrderID) AS TotalPrice
    FROM DB_Orders O
) Orders

【讨论】:

    【解决方案2】:

    这个怎么样:

    select 
        o.orderID,
        sum(od.SubTotal) as TotalPrice,
        row_number() over (order by sum(od.SubTotal)) as RowNum
    from DB_Orders o
    join DB_OrderDetails od
        on o.OrderID = od.OrderID
    group by o.OrderID
    

    示例如下:SQL Fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 2012-11-09
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多