Попытка сгруппировать результаты sql по имени и дате - PullRequest
0 голосов
/ 01 января 2012

У меня есть таблица с именем инженера и датой в виде числа с плавающей запятой.

я сделал следующее

select t.eng_id, t.createdat
from JOBS t 
where t.ENG_ID in (SELECT ENG_NAME From HOSEFLEX.ENGINEERS) 

который получил меня

1   bungle  40767.8305520833
2   bungle  40767.7657221412
3   Shaun   40825.6510914583
4   Shaun   40767.8287994213
5   Shaun   40825.6041891204
6   Shaun   40908.8024086458

я преобразовал число с плавающей точкой в ​​год

select eng_id,
      TO_CHAR( to_date('12/30/1899', 'MM/DD/YYYY') + t.createdat , 'YYYY-MON')
from JOBS t

который получил меня

1   bungle  2011-AUG
2   bungle  2011-AUG
3   Shaun   2011-OCT
4   Shaun   2011-AUG
5   Shaun   2011-OCT
6   Shaun   2011-DEC

но мне нужно количество записей для каждого инженера в месяц

Eng Name  2011-Aug 2011-OCT 2011-DEC
bungle     2        0        0
Shaun      1        2   

и, если это возможно, я бы хотел установить эту дату начала и окончания для фильтрации на

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 01 января 2012

Краткий ответ - вы можете использовать группировку по расчетам. Таким образом, вы можете использовать NVL и case / when, а также другие вычисления и функции.

1 голос
/ 01 января 2012

Группа по инженеру:

select t.eng_id, count(t.createdat)
from JOBS t 
where t.ENG_ID in (SELECT ENG_NAME From HOSEFLEX.ENGINEERS) 
and   t.createdat > 1-DEC-2011 and t.createdat < 1-JAN-2012 -- example of filter by date

group by t.ENG_ID

(Вы не можете группировать по инженерам и отображать дату.)

Обновление:

Что вы можете сделать, это сгруппировать по месяцу и году, а затем отобразить его.

select t.eng_id, Year(t.createdat), Month(t.createdat), count(t.createdat)
from JOBS t 
where t.ENG_ID in (SELECT ENG_NAME From HOSEFLEX.ENGINEERS) 
and   t.createdat > 1-DEC-2011 and t.createdat < 1-JAN-2012    
group by t.ENG_ID, Year(t.createdat), Month(t.createdat)
...