View Single Post
Old 27-05-2009, 15:54   #7
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Cittā: Londra (Torino)
Messaggi: 3692
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.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.

Ultima modifica di gugoXX : 27-05-2009 alle 15:57.
gugoXX č offline   Rispondi citando il messaggio o parte di esso