2010-03-26 2 views
2

Мне нужно сделать то, что для меня является продвинутым. У меня есть эти две таблицы:Сложный порядок заказа?

 
Table: Fruit 

fruitid | received | basketid 
    1  20100310 2 
    2  20091205 3 
    3  20100220 1 
    4  20091129 2 

Table: Basket 
id | name 
1 Big Discounts 
2 Premium Fruit 
3 Standard Produce 

Я даже не уверен, что могу ясно заявить, как я хочу, чтобы разобраться (что, вероятно, большая часть причины, я не могу показаться, чтобы написать код, чтобы сделать это, лол).

Я делаю запрос на соединение и должен сортировать, чтобы все было организовано с помощью корзины. На первом месте появляется корзина с самой ранней плодой. Полученная дата на первом месте, а затем другие строки с одинаковой корзиной по дате по возрастанию, затем корзинка со следующим самым ранним плодом. Полученная дата, за которой следуют другие строки с одинаковой корзиной, и так далее.

Так что выход будет выглядеть следующим образом:

 
Fruitid | Received | Basket 
    4  20091129  Premuim Fruit 
    1  20100310  Premuim Fruit 
    2  20091205  Standard Produce 
    3  20100220  Big Discounts 

Любые идеи, как это сделать в одном исполнении?

ответ

2

попробовать это (SQL код настройки таблицы сервера, но запрос должен работать в любой базе данных)

DECLARE @Fruit table (fruitid int, received int, basketid int) 
INSERT @Fruit VALUES(1,  20100310, 2) 
INSERT @Fruit VALUES(2,  20091205, 3) 
INSERT @Fruit VALUES(3,  20100220, 1) 
INSERT @Fruit VALUES(4,  20091129, 2) 

DECLARE @Basket table (id int,basket varchar(20)) 
INSERT @Basket VALUES (1, 'Big Discounts' ) 
INSERT @Basket VALUES (2, 'Premium Fruit' ) 
INSERT @Basket VALUES (3, 'Standard Produce') 


SELECT 
    f.Fruitid ,f.received,b.basket 
    FROM @Fruit f 
     INNER JOIN (SELECT 
         basketid, MIN(received) AS received 
         FROM @Fruit 
         GROUP BY basketid 
       ) o ON f.basketid = o.basketid 
     INNER JOIN @Basket b ON o.basketid=b.id 
    ORDER BY o.received 

ВЫВОД

Fruitid  received basket 
----------- ----------- -------------------- 
4   20091129 Premium Fruit 
1   20100310 Premium Fruit 
2   20091205 Standard Produce 
3   20100220 Big Discounts 

(4 row(s) affected) 
+0

Думаете, вы должны изменить ЗАКАЗАТЬ, чтобы быть ЗАКАЗОМ o.received, f.received – sgmoore

+0

@sgmoore, да, я заметил, что после @Quassnoi добавила его в свой запрос –

2
SELECT f.fruitid, f.received, ba.name AS basket 
FROM Fruit f 
JOIN (
     SELECT basketid, MIN(received) AS mr 
     FROM fruit 
     GROUP BY 
       basketid 
     ) b 
ON  f.basketid = b.basketid 
JOIN basket ba 
ON  ba.id = f.basketid 
ORDER BY 
     b.mr, f.basketid, f.received 
+0

это не дает столбцы, что ОП хочет –

+0

@ KM: теперь это происходит, а не из-за моего редактирования. –

+0

нет 'f.mr' на заказ должно быть b.mr; 'From Friut' должен быть фруктовым; 'ON f.backetid' должен быть f.basketid; ', ba.name' должно быть ba.basket –

Смежные вопросы