2012-01-19 2 views
0

shipwynum является основным ключом для таблицы convertship.groupby запрос по год

Фактически этот вопрос получает данные правильно, только за 2008 год. Когда я заменяю 2008 год каким-либо другим годом, тогда также получаю правильные данные за этот год. Этот запрос отображает итоговые записи за этот год не в TotalCount. TotalCount имеет всегда один becoz у меня есть группа с shipwynum.
Но я хочу получить данные за 1000 - 2011 отдельно (вместо определенного года, такого как 2008) в этом одном запросе, и TotalCount должен отображать подсчеты для каждого года.

У меня есть этот запрос: =

select 
    distinct 
    count(con.shipwynum) as TotalCount, 
    con.shipwynum, 
    s.deldat, 
    s.deldat as DeliveryQuarter, 
    left(s.deldat,4) as DelYear 
    from convertship con 
    left join shipscheduled s on con.shipwynum = s.shipwynum and s.deleted = 'N' 
    where left(s.deldat,4) > 1000 and left(s.deldat,4) <= 2008 and 
    left(con.condat,4) > 2008 and 
    con.deleted = 'N' and 
    con.wytypid in ('66', '10', '11', '12', '13', '14', '15', '16', '17','18') and 
    s.wytypid not in ('66', '10', '11', '12', '13', '14', '15', '16', '17','18') 
    group by con.shipwynum 

Любая помощь или идеи больш были бы оценены.

Большое спасибо.

+1

Я понятия не имею, каков ваш вопрос? –

+0

Что вы не можете понять? – Bajrang

ответ

0

Я думаю, вы пытаетесь подсчитать количество строк за каждый год?

Из того, что я предполагаю,
есть одна основная таблица convertship и вы хотите присоединиться к convertshipshipscheduled.
Затем введите группу по этим данным в соответствии со своим значением left(con.condat,4).

select distinct  
    count(con.shipwynum) as TotalCount,  
    con.shipwynum,  
    s.deldat,  
    s.deldat as DeliveryQuarter,  
    left(s.deldat,4) as DelYear, 
    left(con.condat,4) as ConYear 
from 
    convertship con  
inner join 
    shipscheduled s on con.shipwynum = s.shipwynum 
where 
    left(s.deldat,4) > 1000 and 
    left(s.deldat,4) <= 2008 and  
    -- left(con.condat,4) > 2008 and  
    con.deleted = 'N' and  
    s.deleted = 'N' and 
    con.wytypid in ('66','10','11','12','13','14','15','16','17','18') and  
    s.wytypid not in ('66','10','11','12','13','14','15','16','17','18')  
group by 
    left(con.condat,4) 

Я предполагаю, что convertship таблица не является слишком большим, если бы не это не будет работать.

+1

С его mysql зачем использовать LEFT, когда YEAR может подойти лучше –

+0

, а 'left join' фактически отменяется условиями' where'. Вы можете заменить его на 'inner join'. –

+0

, когда я удаляю ваш комментарий и заменяю на 'left (s.deldat, 4)> 1000 и left (s.deldat, 4) <= 2002 и left (con.condat, 4)> 2002 и тогда его получение 6 записей за 2002 год. Но в вашем запросе есть только 1 TotalCounts для ConYear 2002.? – Bajrang

0

Попытка:

select count(con.shipwynum) as TotalCount, 
     con.shipwynum, 
     s.deldat, 
     s.deldat as DeliveryQuarter, 
     left(s.deldat,4) as DelYear 
from convertship con 
left join shipscheduled s 
     on con.shipwynum = s.shipwynum and 
      s.deleted = 'N' and 
      left(s.deldat,4) > 1000 and 
      left(s.deldat,4) < left(con.condat,4) and 
      s.wytypid not in ('66', '10', '11', '12', '13', '14', '15', '16', '17','18') 
where con.deleted = 'N' and 
     con.wytypid in ('66', '10', '11', '12', '13', '14', '15', '16', '17','18') and 
group by con.shipwynum, left(s.deldat,4) 

Обратите внимание, что с deldat и DeliveryQuarter не являются ни сгруппированы по ни агрегируются, их значение в выходе по существу будет случайным образом (в пределах DelYear).

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