0

I am trying to show oracle data in following format (need to produce in form of report- may be crystal report);

enter image description here

Table has following fields:

enter image description here

I am able to produce following results so far:

enter image description here

Query:

SELECT to_date('01/01/1999','dd/mm/yyyy') LOGDATE,
    to_date('01/01/1999','dd/mm/yyyy') MONTH ,
    ''EMPCODE,
    to_number('0') PROJECTCODE , 
    ''ACTIVITY,
    to_number('0')TOTALTIME, 
    ''ENTEREDBY, 
    ''PROJECTDESC, 
    ''SUB_SUBACT_SHORT_DESC,
    B.* 
FROM
(
    select '1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31' 
    from dual
    UNION ALL
    select to_char(TO_DATE(:MONTH,'DD/MM/YYYY'),'DY'),
        to_char(TO_DATE(:MONTH ,'DD/MM/YYYY') + 1,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+2,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+3,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+4,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+5,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+6,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+7,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+8,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+9,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+10,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+11,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+12,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+13,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+14,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+15,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+16,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+17,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+18,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+19,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+20,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+21,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+22,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+23,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+24,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+25,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+26,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+27,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+28,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+29,'DY'),
        to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+30,'DY')
    from dual

) B
UNION ALL
SELECT LOGDATE,TRUNC(LOGDATE,'MM') as period,
    EMPCODE,
    PROJECTCODE,ACTIVITYCODE || '.' || SUBACTIVITY_CODE || '.' || SUB_SUBACTIVITY_CODE AS ACTIVITY,
    TOTALTIME ,ENTEREDBY, 
    PROJECTDESC,
    SUB_SUBACT_SHORT_DESC,
    CASE WHEN to_char(logdate,'dd') = '01' THEN to_char(TOTALTIME) END d1,
    CASE WHEN to_char(logdate,'dd') = '02' THEN to_char(TOTALTIME) END d2,
    CASE WHEN to_char(logdate,'dd') = '03' THEN to_char(TOTALTIME) END d3,
    CASE WHEN to_char(logdate,'dd') = '04' THEN TO_CHAR(TOTALTIME) END d4,
    CASE WHEN to_char(logdate,'dd') = '05' THEN TO_CHAR(TOTALTIME) END d5,
    CASE WHEN to_char(logdate,'dd') = '06' THEN TO_CHAR(TOTALTIME) END d6,
    CASE WHEN to_char(logdate,'dd') = '07' THEN TO_CHAR(TOTALTIME) END d7,
    CASE WHEN to_char(logdate,'dd') = '08' THEN TO_CHAR(TOTALTIME) END d8,
    CASE WHEN to_char(logdate,'dd') = '09' THEN TO_CHAR(TOTALTIME) END d9,
    CASE WHEN to_char(logdate,'dd') = '10' THEN TO_CHAR(TOTALTIME) END d10,
    CASE WHEN to_char(logdate,'dd') = '11' THEN TO_CHAR(TOTALTIME) END d11,
    CASE WHEN to_char(logdate,'dd') = '12' THEN TO_CHAR(TOTALTIME) END d12,
    CASE WHEN to_char(logdate,'dd') = '13' THEN TO_CHAR(TOTALTIME) END d13,
    CASE WHEN to_char(logdate,'dd') = '14' THEN TO_CHAR(TOTALTIME) END d14,
    CASE WHEN to_char(logdate,'dd') = '15' THEN TO_CHAR(TOTALTIME) END d15,
    CASE WHEN to_char(logdate,'dd') = '16' THEN TO_CHAR(TOTALTIME) END d16,
    CASE WHEN to_char(logdate,'dd') = '17' THEN TO_CHAR(TOTALTIME) END d17,
    CASE WHEN to_char(logdate,'dd') = '18' THEN TO_CHAR(TOTALTIME) END d18,
    CASE WHEN to_char(logdate,'dd') = '19' THEN TO_CHAR(TOTALTIME) END d19,
    CASE WHEN to_char(logdate,'dd') = '20' THEN TO_CHAR(TOTALTIME) END d20,
    CASE WHEN to_char(logdate,'dd') = '21' THEN TO_CHAR(TOTALTIME) END d21,
    CASE WHEN to_char(logdate,'dd') = '22' THEN TO_CHAR(TOTALTIME) END d22,
    CASE WHEN to_char(logdate,'dd') = '23' THEN TO_CHAR(TOTALTIME) END d23,
    CASE WHEN to_char(logdate,'dd') = '24' THEN TO_CHAR(TOTALTIME) END d24,
    CASE WHEN to_char(logdate,'dd') = '25' THEN TO_CHAR(TOTALTIME) END d25,
    CASE WHEN to_char(logdate,'dd') = '26' THEN TO_CHAR(TOTALTIME) END d26,
    CASE WHEN to_char(logdate,'dd') = '27' THEN TO_CHAR(TOTALTIME) END d27,
    CASE WHEN to_char(logdate,'dd') = '28' THEN TO_CHAR(TOTALTIME) END d28,
    CASE WHEN to_char(logdate,'dd') = '29' THEN TO_CHAR(TOTALTIME) END d29,
    CASE WHEN to_char(logdate,'dd') = '30' THEN TO_CHAR(TOTALTIME) END d30,
    CASE WHEN to_char(logdate,'dd') = '31' THEN TO_CHAR(TOTALTIME) END d31
FROM TIMESHEET
WHERE PROJECTCODE = 2274
    AND LOGDATE >= TO_DATE('01/08/2011','dd/mm/yyyy')
    AND LOGDATE <= TO_DATE('31/08/2011','dd/mm/yyyy')
    AND TOTALTIME>0

>Is this possible to group the results by Activity? So 'pojectx' will be activity 1.11.1

4

2 に答える 2

0

このような何かがトリックを行う必要があります。fromOracleの不安定な日付関数を除けば、ほとんどの最新のSQL実装で機能するのはかなり標準的なSQLです(句の仮想テーブルとしてサブクエリをサポートしている限り)。

select p.name as project_name  ,
       a.name as activity_name ,
       t.*
from ( select extract(year,t.year)   as year        ,
              extract(month,t.month) as month       ,
              t.project              as project_id  ,
              t.activity             as activity_id ,
              sum( case extract(day,t.month) when  1 then t.time     end ) as time_01        , -- summarize time by each day of the month 
              sum( case extract(day,t.month) when  2 then t.time     end ) as time_02        , -- days with no data will have NULL
              sum( case extract(day,t.month) when  3 then t.time     end ) as time_03        , --   |
              ...                                                                              --   |
              sum( case extract(day,t.month) when 28 then t.time     end ) as time_28        , --   |
              sum( case extract(day,t.month) when 29 then t.time     end ) as time_29        , --   |
              sum( case extract(day,t.month) when 30 then t.time     end ) as time_30        , --   |
              sum( case extract(day,t.month) when 31 then t.time     end ) as time_31        , --   >
              sum( t.activity                                            ) as total_activity ,
              sum( t.time                                                ) as total_time     ,
       from some_table t
       where extract(year,t.month) = 2012
       group by extract(year  , t.month ) ,
                extract(month , t.month ) ,
                t.project ,
                t.activity
     ) summary
join project  p on p.project_id  = summary.project_id
join activity a on a.activity_id = summary.activity_id
order by t.year  ,
         t.month ,
         p.name  ,
         a.name

これには、すべての年、すべての月、すべてのプロジェクト、およびすべてのアクティビティがwhere含まれます。仮想テーブルの句に適切な条件を追加して、ソースデータをフィルタリングします。

于 2012-08-14T16:54:43.347 に答える
0

After doing some research and with the some guidence from old posts on this link i have got the results i was looking for.

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:124812348063

QUERY:

select 'DATE'ACTIVITY, '1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20', '21','22','23','24','25','26','27','28','29','30','31' , 0 AS TOTAL

from dual

UNION ALL

select 'DAYS'ACTIVITY, to_char(TO_DATE(:MONTH,'DD/MM/YYYY'),'DY'), to_char(TO_DATE(:MONTH ,'DD/MM/YYYY') + 1,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+2,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+3,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+4,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+5,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+6,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+7,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+8,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+9,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+10,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+11,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+12,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+13,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+14,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+15,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+16,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+17,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+18,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+19,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+20,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+21,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+22,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+23,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+24,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+25,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+26,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+27,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+28,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+29,'DY'), to_char(TO_DATE(:MONTH,'DD/MM/YYYY')+30,'DY'),

0 TOTAL

FROM DUAL

UNION ALL

SELECT ACTIVITY,

MAX(DECODE (DT, '01', HRS, NULL)) c1, MAX(DECODE (DT, '02', HRS, NULL)) c2, MAX(DECODE (DT, '03', HRS, NULL)) c3, MAX(DECODE (DT, '04', HRS, NULL)) c4, MAX(DECODE (DT, '05', HRS, NULL)) c5, MAX(DECODE (DT, '06', HRS, NULL)) c6, MAX(DECODE (DT, '07', HRS, NULL)) c7, MAX(DECODE (DT, '08', HRS, NULL)) c8, MAX(DECODE (DT, '09', HRS, NULL)) c9, MAX(DECODE (DT, '10', HRS, NULL)) c10, MAX(DECODE (DT, '11', HRS, NULL)) c11, MAX(DECODE (DT, '12', HRS, NULL)) c12, MAX(DECODE (DT, '13', HRS, NULL)) c13, MAX(DECODE (DT, '14', HRS, NULL)) c14, MAX(DECODE (DT, '15', HRS, NULL)) c15, MAX(DECODE (DT, '16', HRS, NULL)) c16, MAX(DECODE (DT, '17', HRS, NULL)) c17, MAX(DECODE (DT, '18', HRS, NULL)) c18, MAX(DECODE (DT, '19', HRS, NULL)) c19, MAX(DECODE (DT, '20', HRS, NULL)) c20, MAX(DECODE (DT, '21', HRS, NULL)) c21, MAX(DECODE (DT, '22', HRS, NULL)) c22, MAX(DECODE (DT, '23', HRS, NULL)) c23, MAX(DECODE (DT, '24', HRS, NULL)) c24, MAX(DECODE (DT, '25', HRS, NULL)) c25, MAX(DECODE (DT, '26', HRS, NULL)) c26, MAX(DECODE (DT, '27', HRS, NULL)) c27, MAX(DECODE (DT, '28', HRS, NULL)) c28, MAX(DECODE (DT, '29', HRS, NULL)) c29, MAX(DECODE (DT, '30', HRS, NULL)) c30, MAX(DECODE (DT, '31', HRS, NULL)) c31,

nvl(sum(hrs),0) total

FROM

(

SELECT * FROM ( SELECT to_char(LOGDATE,'dd') as DT,TO_CHAR(TOTALTIME) AS HRS, ACTIVITYCODE || '.' || SUBACTIVITY_CODE || '.' || SUB_SUBACTIVITY_CODE AS ACTIVITY

FROM TIMSHEET WHERE PROJECTCODE = 2274 AND LOGDATE >= TO_DATE('01/08/2011','dd/mm/yyyy') AND LOGDATE <= TO_DATE('31/08/2011','dd/mm/yyyy') and totaltime>0 ) GROUP BY ACTIVITY , DT,HRS

)

GROUP BY ACTIVITY

RESULTS:

enter image description here

于 2012-08-15T05:26:34.923 に答える