Friday, March 4, 2011
GROUPING SETS
When i work on Dashboard features. I facing problem to calculate by grouping set. Before this i using analytic function OVER PARTITION BY but i think oracle sure got better solution for my prob then i found this great discussion related to what im looking for. For people who are seeking about doing report got much idea there. this is the link:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3230380179748#50647928008459
Act, they are discussing about ROLLUP AND CUBE.
Lastly i found solution related to my work. Thank GOD. Which is a bit same like below example.
SAMPLE SQL> select * from mytable; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 2450 10 7788 SCOTT ANALYST 7566 19-APR-87 3000 20 7839 KING PRESIDENT 17-NOV-81 5000 10 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7876 ADAMS CLERK 7788 23-MAY-87 1100 20 EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 7900 JAMES CLERK 7698 03-DEC-81 950 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10
QUERY select count( case when deptno = 10 and job = 'CLERK' then 1 end ) cat1, 2 count( case when deptno = 20 and job = 'ANALYST' then 1 end ) cat2, 3 count( case when deptno = 30 and job = 'PRESIDENT' then 1 end ) cat3, 4 count( case when deptno = 40 and job = 'CLERK' then 1 end ) cat4, 5 count( case when deptno = 20 and job = 'MANAGER' then 1 end ) cat5, 6 count( case when deptno = 10 and job = 'SALESMAN' then 1 end ) cat6 7 from mytable 8 where hiredate < trunc(sysdate+1) 9 /
RESULT
CAT1 CAT2 CAT3 CAT4 CAT5 CAT6 ---------- ---------- ---------- ---------- ---------- ---------- 1 2 0 0 1 0
in my case. i just change count to sum to get the total of the condition i want. Then using some programming language to populate the SUM(CASE WHEN AND THEN END). About performance, so far ok.
THANKS TO ASKTOM FOR THIS IDEA :)
ITS TAKES ME ABOUT A WEEK TO FIGURE IT OUT.
IM NEWBIE IN DATABASE :p
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment