sql - 无法组合 GROUP BY、ORDER BY 和 UNION
问题描述
SELECT TOP 1 o.OrderID,e.FirstName+''+e.Lastname,COUNT(DISTINCT p.ProductID) AS [NUMBER OF PRODUCTS], DATEDIFF(DAY,o.OrderDate,o.RequiredDate) AS [DAYS TAKEN FOR DELIVERY], s.CompanyName
FROM Orders o, Shippers s, Products p, Employee e, OrderDetails oe
WHERE o.ShipperID=s.ShipperID AND e.EmployeeID=o.EmployeeID
AND o.OrderID=oe.OrderID AND oe.ProductID=p.ProductID
GROUP BY o.OrderID,s.CompanyName,o.OrderDate,o.RequiredDate,e.FirstName,e.LastName
ORDER BY ABS(DATEDIFF(DAY,o.OrderDate,o.RequiredDate)) ASC
UNION
SELECT TOP 1 o.OrderID,e.FirstName+''+e.Lastname,COUNT(DISTINCT p.ProductID) AS [NUMBER OF PRODUCTS], DATEDIFF(DAY,o.OrderDate,o.RequiredDate) AS [DAYS TAKEN FOR DELIVERY], s.CompanyName
FROM Orders o, Shippers s, Products p, Employee e, OrderDetails oe
WHERE o.ShipperID=s.ShipperID AND e.EmployeeID=o.EmployeeID
AND o.OrderID=oe.OrderID AND oe.ProductID=p.ProductID
GROUP BY o.OrderID,s.CompanyName,o.OrderDate,o.RequiredDate,e.FirstName,e.LastName
ORDER BY ABS(DATEDIFF(DAY,o.OrderDate,o.RequiredDate)) DESC;
解决方案
使用括号如下:
SELECT * FROM
(SELECT TOP 1 o.OrderID,e.FirstName+''+e.Lastname,COUNT(DISTINCT p.ProductID) AS [NUMBER OF PRODUCTS], DATEDIFF(DAY,o.OrderDate,o.RequiredDate) AS [DAYS TAKEN FOR DELIVERY], s.CompanyName
FROM Orders o, Shippers s, Products p, Employee e, OrderDetails oe
WHERE o.ShipperID=s.ShipperID AND e.EmployeeID=o.EmployeeID
AND o.OrderID=oe.OrderID AND oe.ProductID=p.ProductID
GROUP BY o.OrderID,s.CompanyName,o.OrderDate,o.RequiredDate,e.FirstName,e.LastName
ORDER BY ABS(DATEDIFF(DAY,o.OrderDate,o.RequiredDate)) ASC)
UNION
(SELECT TOP 1 o.OrderID,e.FirstName+''+e.Lastname,COUNT(DISTINCT p.ProductID) AS [NUMBER OF PRODUCTS], DATEDIFF(DAY,o.OrderDate,o.RequiredDate) AS [DAYS TAKEN FOR DELIVERY], s.CompanyName
FROM Orders o, Shippers s, Products p, Employee e, OrderDetails oe
WHERE o.ShipperID=s.ShipperID AND e.EmployeeID=o.EmployeeID
AND o.OrderID=oe.OrderID AND oe.ProductID=p.ProductID
GROUP BY o.OrderID,s.CompanyName,o.OrderDate,o.RequiredDate,e.FirstName,e.LastName
ORDER BY ABS(DATEDIFF(DAY,o.OrderDate,o.RequiredDate)) DESC);
推荐阅读
- javascript - 高度自动变化时制作动画
- c++ - 带有 __VA_ARGS__ 的嵌套宏不展开
- python - 我们如何测量时间序列功耗模式的可变性?
- python - 我正在尝试使用带有 selenium 的通用蜘蛛模板来抓取爬虫,但是当爬到产品详细信息页面时,它会给出错误的数据
- reactjs - 从 react-router-dom使用时,如何解决此 React 组件无法正确呈现的问题?
- xml - RadioButton 安卓实现
- azure-devops - 发行说明生成
- php - 如何在php中实现这种概念
- java - 处理:你能在处理类之外画画吗?
- reactjs - 如何在 graphql 的模拟服务器上创建 40 个数组