2015-02-21 4 views
0

У меня есть таблица действий в моем приложении. Он имеет идентификатор проекта, идентификатор активности, дату окончания базовой линии, фактическую дату окончания запланированной даты завершения и позднюю дату окончания.Oracle SQL несколько столбцов, выровненных по одному диапазону/легенде

Я хочу взять счетчик активности для каждой недели проекта в каждом столбце даты. Затем я хочу взять каждую из этих столбцов даты и построить их друг против друга.

Конечным результатом будет кривая, показывающая количество видов деятельности в неделю 2 по сравнению с фактическим количеством мероприятий в неделю 2 по сравнению с количеством запланированных мероприятий за вторую неделю и количеством поздних финишей в неделю 2.

Я могу это сделать, чтобы получить данные, чтобы показать ...

SELECT ACTIVITY.PROJECTOBJECTID, 
     ACTIVITY.OBJECTID, 
     TRUNC(ACTIVITY.BASELINEFINISHDATE,'W')+7 AS BLFIN, 
     TRUNC(ACTIVITY.ACTUALFINISHDATE,'W')+7 AS AFIN, 
     TRUNC(ACTIVITY.FINISHDATE,'W')+7 AS FIN, 
     TRUNC(ACTIVITY.REMAININGLATEFINISHDATE,'W')+7 AS LFIN 
    FROM PXRPTUSER.ACTIVITY ACTIVITY 
WHERE (ACTIVITY.PROJECTOBJECTID = :POID) 

Но теперь у меня есть четыре столбца даты. В идеале я хочу четыре столбца подсчета с одним столбцом даты. Вот пример данных, с которыми я должен работать.

PID  AID  BLFIN  AFIN FIN   LFIN 
39987 5874494 2/22/2015  2/22/2015 6/15/2015 
39987 5874495 2/22/2015  2/22/2015 6/15/2015 
39987 5874496 2/22/2015  2/22/2015 6/15/2015 
39987 5874497 2/22/2015  2/22/2015 6/15/2015 
39987 5874498 2/22/2015  2/22/2015 6/15/2015 
39987 5874499 4/22/2015  4/22/2015 6/15/2015 
39987 5874500 2/22/2015  2/22/2015 6/15/2015 
39987 5874501 2/22/2015  2/22/2015 6/15/2015 
39987 5874502 4/8/2015  4/8/2015 6/15/2015 
39987 5874503 4/8/2015  4/8/2015 6/15/2015 
39987 5874504 4/8/2015  4/8/2015 6/15/2015 
39987 5874505 5/15/2015  5/15/2015 6/15/2015 
39987 5874506 5/15/2015  5/15/2015 6/15/2015 
39987 5874507 4/8/2015  4/8/2015 6/15/2015 
39987 5874508 4/8/2015  4/8/2015 6/15/2015 
39987 5874509 4/8/2015  4/8/2015 6/15/2015 
39987 5874510 4/8/2015  4/8/2015 6/15/2015 
39987 5874511 4/8/2015  4/8/2015 6/15/2015 
39987 5874512 4/8/2015  4/8/2015 6/15/2015 
39987 5874513 4/8/2015  4/8/2015 6/15/2015 
39987 5874514 4/8/2015  4/8/2015 6/15/2015 
39987 5874515 4/8/2015  4/8/2015 6/15/2015 
39987 5874516 4/8/2015  4/8/2015 6/15/2015 
39987 5874517 4/8/2015  4/8/2015 6/15/2015 
39987 5874537 2/22/2015  2/22/2015 6/15/2015 
39987 5874538 2/22/2015  2/22/2015 6/15/2015 
39987 5874539 2/22/2015  2/22/2015 6/15/2015 
39987 5874540 2/22/2015  2/22/2015 2/22/2015 
39987 5874542 2/22/2015  2/22/2015 6/15/2015 
39987 5874543 2/22/2015  2/22/2015 6/15/2015 
39987 5874544 2/22/2015  2/22/2015 6/15/2015 
39987 5874545 2/22/2015  2/22/2015 6/15/2015 
39987 5874546 2/22/2015  2/22/2015 6/15/2015 
39987 5874547 2/22/2015  2/22/2015 6/15/2015 
39987 5874548 2/22/2015  2/22/2015 6/15/2015 
39987 5874549 2/22/2015  2/22/2015 6/15/2015 
39987 5874550 2/22/2015  2/22/2015 6/15/2015 
39987 5874551 2/22/2015  2/22/2015 6/15/2015 
39987 5874552 2/22/2015  2/22/2015 6/15/2015 
39987 5874553 2/22/2015  2/22/2015 6/15/2015 
39987 5874554 2/22/2015  2/22/2015 6/15/2015 

ответ

0

Запрос ниже дает описанные результаты. Столбец WKN равен week number in ISO standard, вы можете изменить его на что-то еще, например. 'WW'. Также, если у вас есть даты из разных лет, вы должны конкатенировать год в запросе (присоедините год к wkn в подзапросах bf, af, pf и lf).

with 
bf as (select to_char(blfin, 'iw') wkn, count(aid) cnt 
    from activity group by to_char(blfin, 'iw')), 
af as (select to_char(afin, 'iw') wkn, count(aid) cnt 
    from activity group by to_char(afin, 'iw')), 
pf as (select to_char(fin, 'iw') wkn, count(aid) cnt 
    from activity group by to_char(fin, 'iw')), 
lf as (select to_char(lfin, 'iw') wkn, count(aid) cnt 
    from activity group by to_char(lfin, 'iw')) 
select wkn, nvl(bf.cnt, 0) as baseline, nvl(af.cnt, 0) as actual, 
    nvl(pf.cnt, 0) as planned, nvl(lf.cnt, 0) as late 
    from bf 
    full join af using (wkn) 
    full join pf using (wkn) 
    full join lf using (wkn) 
    where wkn is not null 
    order by wkn 

Результаты:

WKN BASELINE ACTUAL PLANNED LATE 
    --- -------- -------- -------- -------- 
    08  24  0  24  1 
    15  14  0  14  0 
    17   1  0  1  0 
    20   2  0  2  0 
    25   0  0  0  40 
+0

Это здорово !! Он работает точно так же, как это необходимо. Конечно, я сделал некоторые косметические изменения. Однако мне нужен идентификатор проекта слева от столбца WKN в каждой строке. Возможно, я запустил это против всех открытых проектов, а затем сгруппировал результаты в отдельный отчет. Я попытался изменить полное заявление о соединении, выполнив «full join af using (wkn, pid)», и это не сработало. Любые идеи о том, как я могу туда добраться? Большое спасибо! –

+0

Я смог заставить его работать. Я добавил идентификатор проекта к операторам select в секции WITH. Затем я добавил id проекта в группу по предложениям. Затем я добавил идентификатор проекта до WKN. Затем я добавил PID до WKN в полном соединении. Presto! Огромное спасибо. –

+0

Я рад, что это было полезно. Удачи вам в проекте :-) –

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