2010-11-23 31 views
0

以下のクエリでは、@processtableはテーブル変数であり、tempは結合しようとしているときに派生テーブルです。次のエラーが表示されます。テーブル変数と派生テーブルの結合

The column prefix 't' does not match with a table name or alias name used in the query.

SELECT t.Order 
     ,CONVERT(NVARCHAR, temp.[DateTime], 101) AS [DateTime] 
     ,t.Status 
     ,t.Domain 
     ,t.Media 
     ,t.Approved  
     ,t.CreatedBy  
FROM @ProcessTable t 
JOIN (SELECT MAX(Id),Order FROM OrderDetail OD WHERE OD.Order = t.Order) temp 
ON temp.Order = t.Order 
ORDER BY temp.[DateTime] DESC, Approved ASC 
+0

..あなたのデータを記述し、それから抜け出したいものを説明する方がいいかもしれません....あなたのクエリを見ているだけで、これはうまく動作しません。 - John Hartsock 1分前に編集 –

+0

@ John- @processtableのオーダーについては、注文の最大(ID)、つまりその注文の最新のDateTimeに基づいてorderdetailテーブルからその注文の日時を取得する必要があります – Pinu

答えて

0

をほぼ右...結合基準の1つとして含める場合は、派生テーブルの横にwhere句は必要ありません。

SELECT  
    t.Order 
    ,CONVERT(NVARCHAR,temp.[DateTime],101) AS [DateTime] 
    ,t.Status 
    ,t.Domain 
    ,t.Media 
    ,t.Approved  
    ,t.CreatedBy   
FROM @ProcessTable t 
JOIN (SELECT MAX(Id) AS MaxID,Order, Max([DateTime]) AS [DateTime] FROM OrderDetail OD Group By Order) temp 
    ON temp.Order = t.Order 
ORDER BY temp.[DateTime] DESC, Approved ASC 
+0

このエラーが発生しました 'temp'の列1に列が指定されていません。 – Pinu

+0

@Pinu ...ごめんなさい... ...派生テーブルでagregateを使用する場合、エイリアスを与える必要があります....答えを修正します –

+0

@Pinu ....最終的に、派生テーブルに必要なすべてのフィールドが含まれています。 temp [DateTime]を使用しますが、派生テーブルの列リストには表示されません。 –

2

これを試してみてください:

SELECT  t.Order 
     ,CONVERT(NVARCHAR,temp.[DateTime],101) AS [DateTime] 
     ,t.Status 
     ,t.Domain 
     ,t.Media 
     ,t.Approved  
     ,t.CreatedBy   
    FROM @ProcessTable t 
    JOIN (SELECT MAX(Id) AS LatestId, Order FROM OrderDetail OD GROUP BY Order) temp 
    ON temp.Order = t.Order 
    ORDER BY temp.[DateTime] DESC, Approved ASC 

注、私は、ネストされたSELECTおよびGROUP BYに追加でOD.Order = t.Order句を削除しました。その結合(temp.Order = t.Order)の横にある条件はフィルタリングを行いますので、ネストされた選択にする必要はありません。エラーが発生しています。さらに、集計関数(MAX)を使用している場合は、GROUP BYが必要です。

また、私はあなたのようなサブクエリでt.Orderを参照することができるとは思わない

0

として返されるMAXのエイリアス(ID)を与えてくれました。その節を処理するには、単に結合に頼るべきです。

など。単にOD.Order = t.Orderを削除し、それを処理するためにjoin節を許可します。