0

我正在开发一个 SQL Server 2008 数据库。我需要获取客户的特定订单及其最新订单 ID 和最新订单数据。我的挑战是,我需要一行中的数据。目前,我正在尝试以下查询:

 SELECT
  o.*,
  c.[FirstName],
  c.[LastName],
  c.[PlayerName],
  (SELECT TOP 1 o2.CreatedDate, o2.ID  FROM [Order] o2 ORDER BY [CreatedOn] DESC)
 FROM
  [Order] o,
  [Customer] c
 WHERE  
  o.[ID]=c.[CustomerID]

当我执行此查询时,我收到以下错误:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

您可以想象,在某些情况下,客户不会有以前的订单。我该如何做到这一点并将结果放入一行?

谢谢!

4

2 回答 2

2

使用 CTE 的方式略有不同。

WITH LatestOrder AS (SELECT TOP 1 * FROM [Order] ORDER BY [CreatedOn] DESC) 
 SELECT
  o.*,
  c.[FirstName],
  c.[LastName],
  c.[PlayerName],
  lo.CreatedDate,
  lo.ID
 FROM [Order] o
 JOIN [Customer] c
    ON o.[ID]=c.[CustomerID]
 CROSS JOIN LatestOrder lo
于 2013-02-15T16:58:49.563 回答
2
 SELECT
  o.*,
  c.[FirstName],
  c.[LastName],
  c.[PlayerName],
  (SELECT TOP 1 o2.CreatedDate FROM [Order] o2 ORDER BY [CreatedOn] DESC),
  (SELECT TOP 1 o2.ID FROM [Order] o2 ORDER BY [CreatedOn] DESC)
 FROM
  [Order] o,
  [Customer] c
 WHERE  
  o.[ID]=c.[CustomerID]

错误是说您不能在子查询中选择两个字段。所以你必须分开做。

于 2013-02-15T16:49:05.347 回答