2010-11-23 6 views
0

Dans la requête ci-dessous @processtable est une variable de table et la température est une table dérivée quand je suis en train de les rejoindre, je reçois l'erreur suivante:variable de table Assemblage et table dérivée

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

.. peut-être que ce serait mieux de décrire vos données et d'expliquer ce que vous voulez en tirer .... parce que regarder votre requête cela ne marchera pas. - John Hartsock Il ya 1 minute modifier –

+0

@ John- Pour l'ordre dans @processtable, je dois obtenir le datetime pour cette commande de la table orderdetail basé sur le max (ID) de la commande c.-à-d. Le dernier DateTime pour cet ordre – Pinu

Répondre

0

Vous étiez presque juste ... Vous n'avez pas besoin de la clause where dans la table dérivée si vous l'incluez comme l'un des critères Join.

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

maintenant c'est me donnant cette erreur Aucune colonne n'a été spécifiée pour la colonne 1 de 'temp'. – Pinu

+0

@Pinu ... désolé ouais ... lors de l'utilisation des agrégats dans les tableaux dérivés, vous devez lui donner un alias .... Je vais corriger la réponse –

+0

@Pinu .... enfin inclure tous les champs dont vous avez besoin dans votre table dérivés . Notez que vous utilisez temp. [DateTime] mais je ne le vois pas dans la liste des colonnes de votre table dérivée. –

2

Essayez ceci:

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 

Remarque, j'ai enlever la OD.Order = clause t.Order dans la imbriquée SELECT et ajouté dans un GROUP BY. La condition à côté de cette jointure (temp.Order = t.Order) fait que le filtrage n'a pas besoin d'être dans le select imbriqué - il provoquait l'erreur. De plus, lorsque vous utilisez une fonction d'agrégat (MAX), vous avez besoin du GROUP BY.

Aussi, j'ai donné un alias pour MAX (Id) à retourner en

0

Je ne pense pas que vous pouvez faire référence à l't.Order dans la sous-requête en tant que tel. Vous devriez simplement compter sur la jointure pour gérer cette clause.

E.g. supprimez simplement OD.Order = t.Order et autorisez la clause de jointure à le gérer.

Questions connexes