0

私はSQLServer2008データベースに取り組んでいます。顧客の特​​定の注文と、最新の注文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
 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]

エラーは、サブクエリで2つのフィールドを選択できないことを示しています。したがって、それらを個別に行う必要があります。

于 2013-02-15T16:49:05.347 に答える
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 に答える