Переменная соединяющей таблицы и производной таблицы - PullRequest
0 голосов
/ 23 ноября 2010

В запросе ниже @processtable является табличной переменной, а temp является производной таблицей, когда я пытаюсь присоединиться к ним, я получаю следующую ошибку:

Префикс столбца 't' делаетне совпадает с именем таблицы или псевдонимом, используемым в запросе.

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

Ответы [ 3 ]

2 голосов
/ 23 ноября 2010

Попробуйте это:

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

Обратите внимание, я удалил предложение OD.Order = t.Order во вложенном SELECT и добавил в GROUP BY. Условие рядом с этим соединением (temp.Order = t.Order) выполняет фильтрацию, поэтому нет необходимости находиться во вложенном выделении - оно вызывало ошибку. Кроме того, поскольку вы используете агрегатную функцию (MAX), вам требуется GROUP BY.

Также я дал псевдоним MAX (Id), который будет возвращен как

0 голосов
/ 23 ноября 2010

Я не думаю, что вы можете ссылаться на t.Order в подзапросе как таковом. Вы должны просто положиться на соединение, чтобы обработать это предложение.

например. просто удалите OD.Order = t.Order и позвольте предложению соединения обрабатывать его.

0 голосов
/ 23 ноября 2010

Вы были почти правы ... Вам не нужно выражение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...