Запрос Oracle SQL Rollup: определение начала группы

Как мы можем определить начало группы в Rollup? И включить значение группы, объединив его с некоторым полезным текстом и отобразив его как первую строку группы?

e.g:

dept   emp_name sal
----   -------- ---
10     sac      999
10     abc      888
20     pqr      777
20     lmn      123
30     stv      444
30     com      555

o/p after rollup should be

dept             emp_name sal
----             -------- ---
Department 10    NULL     NULL
10               sac      999
10               abc      888
20                        1887   
Department 20    NULL     NULL
20               pqr      777
20               lmn      123
20                        900 
Department 30    NULL     NULL
30               stv      444
30               com      555
30                        999
                          3786

person James Bond    schedule 11.03.2014    source источник
comment
Вы можете использовать GROUP BY ROLLUP   -  person Dipendu Paul    schedule 11.03.2014


Ответы (1)


Вот запрос, с помощью которого вы можете выполнить требование. Он использует GROUP BY ROLLUP

SELECT DISTINCT 1 AS rn,dept, CONCAT('Department ',  dept) AS DeptDesc, NULL AS Sum
  FROM your_table 
UNION ALL
SELECT 2, dept, CAST(dept AS VARCHAR(10)), SUM(SAL)
  FROM your_table
GROUP BY ROLLUP(dept, emp_name)
ORDER BY dept, rn, sum  

Вот код в SQL Fiddle.

person Dipendu Paul    schedule 11.03.2014