with multiple columns sql-server sql-server-2008 sum rollup

sql server - multiple - ¿Suma con el servidor SQL RollUP-pero solo el último resumen?



sql group by sum (4)

Tengo esta consulta:

DECLARE @t TABLE(NAME NVARCHAR(MAX),datee date,val money) insert INTO @t SELECT ''a'',''2012-01-02'',100 insert INTO @t SELECT ''a'',''2012-01-02'',100 insert INTO @t SELECT ''a'',''2012-01-03'',100 insert INTO @t SELECT ''a'',''2012-01-05'',100 insert INTO @t SELECT ''b'',''2012-01-06'',200 insert INTO @t SELECT ''b'',''2012-01-07'',200 insert INTO @t SELECT ''d'',''2012-01-07'',400 insert INTO @t SELECT ''e'',''2012-01-09'',500 insert INTO @t SELECT ''f'',''2012-01-12'',600 SELECT Name,datee,SUM (val) from @t GROUP BY NAME ,datee

Actualmente el resultado es:

PERO necesito agregar sum al final. Así que lo intenté con el rollup:

SELECT Name,datee,SUM (val) from @t GROUP BY NAME ,datee with ROLLUP

PERO solo necesito la última suma de la línea total. No necesito las sum''s en el informe

Entonces, ¿cómo se puede obtener el resultado deseado?

(No puedo cambiar la cláusula de group by porque otras personas también lo necesitan, solo quiero agregar una suma al final con / sin resumen).

sql online está aquí


Es posible con GROUPING SETS , intente esto:

SELECT Name,datee,SUM (val) FROM @t GROUP BY GROUPING SETS((NAME ,datee), ())

SQL Fiddle


Puede utilizar esta consulta:

SELECT * FROM ( SELECT Name , datee , SUM(val) summ FROM @t GROUP BY NAME , datee WITH ROLLUP ) A WHERE ( datee IS NOT NULL OR ( datee IS NULL AND name IS NULL ) )


Si solo desea el total final, ¿no puede simplemente usar UNION ALL :

SELECT Name,datee,SUM (val) from @t GROUP BY NAME ,datee union all SELECT null,null,SUM (val) from @t

Ver SQL Fiddle con Demo.

O puede usar una cláusula WHERE para filtrar las filas con los valores null :

select name, datee, total from ( SELECT Name,datee,SUM (val) total from @t GROUP BY NAME, datee with rollup ) src where datee is not null or ( name is null and datee is null )

Ver SQL Fiddle con Demo.

El resultado es:

| NAME | DATEE | COLUMN_2 | ---------------------------------- | a | 2012-01-02 | 200 | | a | 2012-01-03 | 100 | | a | 2012-01-05 | 100 | | b | 2012-01-06 | 200 | | b | 2012-01-07 | 200 | | d | 2012-01-07 | 400 | | e | 2012-01-09 | 500 | | f | 2012-01-12 | 600 | | (null) | (null) | 2300 |


También es posible con ROLLUP() :

SELECT Name, datee, SUM (val) FROM @t GROUP BY ROLLUP((NAME, datee)) ;

WITH ROLLUP , así como WITH CUBE , no son estándar y están en desuso. (Consulte la sintaxis que no cumple con las normas ISO en el manual de GROUP BY ).

Se debe tener en cuenta que ROLLUP() no es compatible con un nivel de compatibilidad inferior a 90 en SQL Server 2005 o inferior a 100 en SQL Server 2008+, mientras que GROUPING SETS() es.