|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2006
Messaggi: 883
|
[SQL Server] Piccolo aiuto Vista. Distinct e somme
Avrei bisogno di un aiuto, um po urgente
![]() Devo creare una vista particolare ....... vado subito con un esempio.. Data la seguente Tabella (o vista) AA BB CC DD EE 1 a b c 2 2 a b c 3 3 s f r 2 4 s f r 5 Come risultato avrei bisogno delle somme in base al ragguppamento di AA CC DD, spero di essermi spiegato, tutto in un unica vista. Come di seguito ... AA BB CC DD EE 1 a b c 2 2 a b c 3 . . . . 5 3 s f r 2 4 s f r 5 . . . . 7 GRAZIE MILLE A CHI MI AIUTERA'
__________________
Un giorno le macchine riusciranno a risolvere tutti i problemi, ma mai nessuna di esse potrà porne uno. (Albert Einstein) Il calcolatore è straordinariamente veloce, accurato e stupido. L'uomo è incredibilmente lento, impreciso e creativo. L'insieme dei due costituisce una forza incalcolabile. (Albert Einstein) |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Nov 2006
Città: Mantova
Messaggi: 466
|
Quote:
as SELECT *,SUM(EE) FROM nome_tua_tabella GROUP BY AA,CC,DD (questo in sql standard)
__________________
![]() |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: May 2006
Messaggi: 883
|
Quote:
ma a me intessa anche che mi inserisca una nuova riga ogni qualvolta che effettua un raggruppamento ... ![]()
__________________
Un giorno le macchine riusciranno a risolvere tutti i problemi, ma mai nessuna di esse potrà porne uno. (Albert Einstein) Il calcolatore è straordinariamente veloce, accurato e stupido. L'uomo è incredibilmente lento, impreciso e creativo. L'insieme dei due costituisce una forza incalcolabile. (Albert Einstein) |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2006
Città: Mantova
Messaggi: 466
|
Quote:
ho paura che nn si possa
__________________
![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
Pronti
Questo il modo che mi sembra piu' efficiente, anche se forse un po' oscuro. Codice:
SELECT aa,bb,cc,dd,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 Altrimenti puoi sempre provare con qualcosa di piu' standard tipo Codice:
SELECT * FROM ( SELECT aa,bb,cc,dd,ee FROM test UNION ALL SELECT NULL,bb,cc,dd,SUM(ee) FROM test GROUP BY bb,cc,dd ) as tmp ORDER BY bb,cc,dd,aa
__________________
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 14:47. |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: May 2006
Messaggi: 883
|
Quote:
se nella riga del totale è possibile mettere campi vuoti ad esclusione del totale, o meglio a fianco della quantità un scritta totale .... è possibile? grazie ancora
__________________
Un giorno le macchine riusciranno a risolvere tutti i problemi, ma mai nessuna di esse potrà porne uno. (Albert Einstein) Il calcolatore è straordinariamente veloce, accurato e stupido. L'uomo è incredibilmente lento, impreciso e creativo. L'insieme dei due costituisce una forza incalcolabile. (Albert Einstein) |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3691
|
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 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. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:53.