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.
这应该不是问题.你能发布失败的确切查询吗?
此外,对结果进行分组将比运行嵌套查询更容易,也更快:
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)