2013-08-27 4 views
0

У меня есть две таблицы RDC и Cons_Status, rdc имеет уникальный столбец в нем RDC_ConsNO. И против этого номера консигнации может быть несколько записей в таблице Cons_Status, как показано на прикрепленном изображении. Я хочу написать запрос, в котором я получаю только одну запись, присоединенную к статусу с максимальным значением sts_id. Я использую SQL Server 2012.Группа SQL Server слева и слева Outer Join Пользовательский результирующий набор

SELECT STS_ID,RDC_CONSNO,STS_STATUS , RDC_DATE,RDC_CUSTOMER,DEST_NAME FROM RDC LEFT OUTER JOIN CONS_STATUS ON RDC_CONSNO=STS_CONSNO 
INNER JOIN DESTINATION ON DEST_ID=RDC_DESTINATION WHERE RDC_CONSNO='HD88300' 
ORDER BY STS_ID 

схему базы данных для таблиц

enter image description here

+2

не показывают изображения. Ссылки [мертвы когда-то] (http://en.wikipedia.org/wiki/Link_rot), мы также не можем использовать их для создания выборочных данных. –

+0

@TimSchmelter Пожалуйста, смотрите сейчас. – MegaMind

+1

Я не понимаю, вы только что добавили еще больше изображений. Если вы скопировали/вставили образцы данных, у нас были бы как данные, так и схема в [SQL-Fiddle] (http://sqlfiddle.com/), используя [«Text to DDL»] (http: //webapps.stackexchange .com/questions/41382/sql-fiddles-text-to-ddl-option). –

ответ

1

Не забудьте префикс столбцов

SELECT ?? FROM RDC 
OUTER APPLY 
(SELECT TOP 1 * FROM CONS_STATUS 
WHERE RDC.RDC_CONSNO = STS_CONSNO 
ORDER BY sts_id DESC 
) a 
INNER JOIN DESTINATION d 
ON d.DEST_ID=RDC.RDC_DESTINATION 
WHERE RDC.RDC_CONSNO='HD88300' 
ORDER BY a.STS_ID 
+0

@ t-clause.dk Спасибо, что cross apply does work, но он устраняет использование левого внешнего соединения. Если в таблице cons_status нет связанной записи, она ничего не возвращает. – MegaMind

+0

@MegaMind это внешний вид сейчас –