2013-09-16 3 views
0
Orders 
OrderNo OrderItems CusID 
5001  2   300001 
5002  1   300001 
5003  2   300002 

OrderDetails 
OrderDetailsNo  OrderNo OrderItem 
70001    5001  Hotdog 
70002    5001  Pancake 
70003    5002  Iced Tea 
70004    5003  Bacon Sandwich 
70005    5003  Ham 

Я использую select top 1 from Orders Order By OrderNo Desc, чтобы получить последнюю строку, если нет объединений.Последняя строка с присоединениями

OrderNo OrderItems CusID 
5003  2   300002 

Как я могу получить последний результат заказа с левым внешним соединением?

Результат

OrderNo OrderItems CusID  OrderDetailsNo OrderItem 
5003  2   300002 70004   Bacon Sandwich 
5003  2   300002 70005   Ham 

Sample Внешнее объединение

select Orders.OrderNo, OrderItems, CusID, OrderDetailsNo, OrderItem 
From Orders 
left outer join 
OrderDetails 
on Orders.OrderNo = OrderDetails.OrderNo 

ответ

1

Это должно работать:

select Orders.OrderNo, OrderItems, CusID, OrderDetailsNo, OrderItem 
From (select top 1 * from Orders Order By OrderNo Desc) Orders 
left outer join 
OrderDetails 
on Orders.OrderNo = OrderDetails.OrderNo 

или

select top 1 with ties Orders.OrderNo, OrderItems, CusID, OrderDetailsNo, OrderItem 
From Orders 
left outer join 
OrderDetails 
on Orders.OrderNo = OrderDetails.OrderNo 
Order By Orders.OrderNo Desc 
+0

Первый работает. Спасибо dnoeth :) –

+0

Добавил tablename для второго ORDER BY, теперь оба должны работать – dnoeth

0
; WITH cte AS (
    SELECT TOP (1) 
     orderno 
     , orderitems 
     , CusID 
    FROM orders 
    ORDER 
     BY orderno DESC 
) 
SELECT cte.orderno 
    , cte.orderitems 
    , cte.CusID 
    , orderdetails.orderdetailsno 
    , orderdetails.orderitem 
FROM cte 
LEFT 
    JOIN orderdetails 
    ON cte.orderno = orderdetails.orderno 
Смежные вопросы