作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试让 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
关于SQL Server ORDER BY/WHERE 与嵌套选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2567167/
我是一名优秀的程序员,十分优秀!