PDA

View Full Version : [SQL Server] Piccolo aiuto Vista. Distinct e somme


almaxy
27-05-2009, 12:44
Avrei bisogno di un aiuto, um po urgente :rolleyes:
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'

..::DAVE::..
27-05-2009, 12:56
Avrei bisogno di un aiuto, um po urgente :rolleyes:
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'

CREATE VIEW nome_tua_vista
as SELECT *,SUM(EE)
FROM nome_tua_tabella
GROUP BY AA,CC,DD

(questo in sql standard)

almaxy
27-05-2009, 13:44
CREATE VIEW nome_tua_vista
as SELECT *,SUM(EE)
FROM nome_tua_tabella
GROUP BY AA,CC,DD

(questo in sql standard)

GRAZIE 1000 ....
ma a me intessa anche che mi inserisca una nuova riga ogni qualvolta che effettua un raggruppamento ... :boh:

..::DAVE::..
27-05-2009, 13:51
GRAZIE 1000 ....
ma a me intessa anche che mi inserisca una nuova riga ogni qualvolta che effettua un raggruppamento ... :boh:
edit.
ho paura che nn si possa

gugoXX
27-05-2009, 14:45
Pronti

Questo il modo che mi sembra piu' efficiente, anche se forse un po' oscuro.

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


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

almaxy
27-05-2009, 15:43
Pronti

Questo il modo che mi sembra piu' efficiente, anche se forse un po' oscuro.

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


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


grazie mille per l'aiuto il secondo va bene, solo che ti devo chiedere un altro piacere ....
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

gugoXX
27-05-2009, 15:54
E' possibile per entrambi i casi, ma...


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.