我正在尝试让SQL Server按嵌套选择中的一列进行排序。我知道这不是执行此操作的最佳方法,但需要完成。

我有两个表,Bookings和BookingItems。 BookingItems包含StartDate和EndDate字段,并且一个Booking上可以有多个BookingItems。我需要从BookingItems中找到最早的开始日期和最晚的结束日期,然后对这些值进行过滤和排序。

我尝试使用嵌套选择,但是当我尝试在WHERE或ORDER BY中使用所选列之一时,出现“无效列名”。

SELECT b.*, (SELECT COUNT(*) FROM bookingitems i WHERE b.BookingID = i.BookingID) AS TotalRooms,
        (SELECT MIN(i.StartDate) FROM bookingitems i WHERE b.BookingID = i.BookingID) AS StartDate,
        (SELECT MAX(i.EndDate) FROM bookingitems i WHERE b.BookingID = i.BookingID) AS EndDate
FROM bookings b LEFT JOIN customers c ON b.CustomerID = c.CustomerID  WHERE StartDate >= '2010-01-01'

我是否缺少有关SQL排序的信息?我正在使用SQL Server 2008。

最佳答案

那不应该是一个问题。您可以发布失败的确切查询吗?

此外,与运行嵌套查询相比,对结果进行分组将更容易并且可能更快:

SELECT
  TotalRooms = COUNT(*)
, StartDate = MIN(i.StartDate)
, EndDate =  MAX(i.EndDate)
FROM bookings b
LEFT JOIN bookingitems bi
  ON b.BookingID = bi.BookingID
GROUP BY b.BookingID
WHERE MIN(i.StartDate) >= '2010-01-01'
ORDER BY StartDate, EndDate

10-06 09:25