E' possibile per entrambi i casi, ma...
Codice:
SELECT CASE WHEN GROUPING(aa)=0 THEN aa ELSE NULL END newaa,
CASE WHEN GROUPING(aa)=0 THEN bb ELSE NULL END newbb,
CASE WHEN GROUPING(aa)=0 THEN cc ELSE NULL END newcc,
CASE WHEN GROUPING(aa)=0 THEN dd ELSE 'TOTALE' END newdd,
SUM(ee) val
FROM test
GROUP BY dd,cc,bb,aa
WITH ROLLUP
HAVING GROUPING(bb)=0 AND GROUPING(cc)=0 AND GROUPING(dd)=0
SELECT CASE WHEN filt=1 THEN aa ELSE NULL END AA2,
CASE WHEN filt=1 THEN bb ELSE NULL END BB2,
CASE WHEN filt=1 THEN cc ELSE NULL END CC2,
CASE WHEN filt=1 THEN dd ELSE 'TOTALE' END DD2,
ee
FROM (
SELECT 1 filt, aa,bb,cc,dd,ee FROM test
UNION ALL
SELECT 0 filt, NULL,bb,cc,dd,SUM(ee)
FROM test
GROUP BY bb,cc,dd
) as tmp
ORDER BY bb,cc,dd,aa desc
Ma mi sembra tanto che tu stia cercando di pilotare l'SQL per questioni di reporting.
Non si dovrebbe fare.
L'SQL dovrebbe essere usato solo per estrarre le informazioni.
Un altro linguaggio ad alto livello o un tool di reportistica dovrebbero macinare i dati restituiti dall'SQL.
Altrimenti si capisce subito come al cambiare di anche solo una caratteristica di layout (es: Invertire prima con seconda colonna) occorre mettere di nuovo mano al database o alle query.