2013-05-31 2 views
0

На данный момент у меня есть данные, разбитые на месячные интервалы. Вот как я хочу, чтобы он отображался, но я пытаюсь отображать только ordered_by для тех, у кого есть 300 или более всего в LoadCount для всей таблицы. Поэтому в основном я хочу выкинуть любого из ordered_by, которые не имеют по крайней мере 300Отображение и заказ, основанный на той же колонке

SELECT YEAR(stop.actual_arrival) AS Year, MONTH(stop.actual_arrival) AS Month, COUNT(stop.id) AS DeliveryCount, orders.ordered_by, COUNT(DISTINCT orders.id) 
       AS LoadCount 
FROM  stop INNER JOIN 
        (SELECT company_id, order_id, tractor_id 
        FROM  billing_history 
        GROUP BY order_id, tractor_id, company_id) AS derivedtbl_1 ON stop.company_id = derivedtbl_1.company_id AND stop.order_id = derivedtbl_1.order_id INNER JOIN 
       tractor ON derivedtbl_1.company_id = tractor.company_id AND derivedtbl_1.tractor_id = tractor.id INNER JOIN 
       orders ON derivedtbl_1.company_id = orders.company_id AND derivedtbl_1.order_id = orders.id 
WHERE (orders.order_type_id IN ('12', '13')) AND (stop.stop_type = 'SO') AND (stop.actual_arrival >= DATEADD(month, - 18, GETDATE())) AND (orders.customer_id = 945000) AND 
       (orders.ordered_by IS NOT NULL) 
GROUP BY YEAR(stop.actual_arrival), MONTH(stop.actual_arrival), orders.ordered_by 
ORDER BY Year, Month, orders.ordered_by 

Я продолжаю идти туда и обратно через нужен ли я производную таблицу или что ... любая помощь будет очень ценен. Спасибо, парни.

Я пытаюсь выбросить любой из ordered_by, который не составляет всего 300. Если они добавляют до 300 по всей доске, я хочу, чтобы они отображались, даже если они на 5 для этой линии.

+0

Просто не отображайте поля порядка на вашем прикладном уровне. – JNK

ответ

0

Если я правильно понимаю ваш вопрос, вы можете использовать оператор CASE внутри вашего предложения select, чтобы показать NULL или orders.ordered_by в зависимости от значения LoadCount. Вот страница с некоторыми примерами: http://msdn.microsoft.com/en-us/library/ms181765(v=sql.110).aspx

0

Если все, что вы хотите сделать, это выбросить какие-либо результаты, которые не имеют ordered_by менее 300, вы можете использовать пункт HAVING с GROUP BY

<snip...> 
GROUP BY YEAR(stop.actual_arrival), MONTH(stop.actual_arrival), orders.ordered_by 
HAVING orders.ordered_by >= 300 
ORDER BY Year, Month, orders.ordered_by 
+0

Я пытаюсь выкинуть любой из 'ordered_by', который не содержит всего 300. Если они добавляют до 300 по всей доске, я хочу, чтобы они отображались, даже если они на 5 для этой линии. –

+0

@JimmyLive В этом случае попробуйте 'HAVING SUM (orders.ordered_by)> = 300'. – EvilBob22

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