嵌套选择的SQL Server ORDER BY/WHERE

Ech*_*lon 5 sql t-sql sql-server sql-server-2008

我试图让SQL Server按嵌套选择的列进行排序.我知道这不是最好的方法,但它需要完成.

我有两个表,预订和BookingItems.BookingItems包含StartDate和EndDate字段,预订中可以有多个BookingItems.我需要从BookingItems找到最早的startdate和最新结束日期,然后按这些值进行过滤和排序.

我尝试使用嵌套选择,但是当我尝试在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'
Run Code Online (Sandbox Code Playgroud)

我错过了一些有关SQL排序的内容吗?我正在使用SQL Server 2008.

Chr*_*tal 7

这应该不是问题.你能发布失败的确切查询吗?

此外,对结果进行分组将比运行嵌套查询更容易,也更快:

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
Run Code Online (Sandbox Code Playgroud)