1
在SQL Server 2014
中,我使用Northwind
作为示例数据库,并使用Orders
表。使用Top with Union全部
选择第一行:
select top 1 orderID, CustomerID,EmployeeID,OrderDate,RequiredDate
from orders
输出:
orderID CustomerID EmployeeID OrderDate RequiredDate
10248 VINET 5 1996-07-04 00:00:00.000 1996-08-01 00:00:00.000
用于选择的最后一行:
select top 1 orderID, CustomerID,EmployeeID,OrderDate,RequiredDate
from orders order by orderID desc
输出:
orderID CustomerID EmployeeID OrderDate RequiredDate
11077 RATTC 1 1998-05-06 00:00:00.000 1998-06-03 00:00:00.000
让合并第一和最后一行通过使用Union ALL
:
select top 1 orderID, CustomerID,EmployeeID,OrderDate,RequiredDate
from orders
union all
select top 1 orderID, CustomerID,EmployeeID,OrderDate,RequiredDate
from orders order by orderID desc
输出:
orderID CustomerID EmployeeID OrderDate RequiredDate
10248 VINET 5 1996-07-04 00:00:00.000 1996-08-01 00:00:00.000
10248 VINET 5 1996-07-04 00:00:00.000 1996-08-01 00:00:00.000
那么,为什么最后的结果不显示数据符合市场预期。
我知道得到第一和最后一排,用下一个: -
select top 1 orderID, CustomerID,EmployeeID,OrderDate,RequiredDate
from orders
union all
Select * from
(
select top 1 orderID, CustomerID,EmployeeID,OrderDate,RequiredDate
from orders order by orderID desc) a
输出: -
orderID CustomerID EmployeeID OrderDate RequiredDate
10248 VINET 5 1996-07-04 00:00:00.000 1996-08-01 00:00:00.000
11077 RATTC 1 1998-05-06 00:00:00.000 1998-06-03 00:00:00.000
但我仍然感到困惑,为什么我应该,但第二选择成派生表!
它们不同,因为您在第一个查询中没有使用“ORDER BY”。如果没有'ORDER BY',那么每次'TOP 1'的结果都不能保证一致。如果你想获得第一个结果,你需要做一个'ORDER BY orderID ASC'。 – Siyual
@Siyual,它不起作用,如果我在第一个查询中使用了“Order by OrderID ASC”,我得到:'关键字'union'附近的语法错误。 ' –