Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Obtener totales usando OVER()

Estas en el tema de Obtener totales usando OVER() en el foro de SQL Server en Foros del Web. Hola He estado mirando ejemplos del uso del OVER() para evitar subconsultas y no me acabo de aclarar. He probado con este código y no ...
  #1 (permalink)  
Antiguo 07/07/2016, 15:39
 
Fecha de Ingreso: abril-2010
Mensajes: 68
Antigüedad: 14 años, 7 meses
Puntos: 0
Obtener totales usando OVER()

Hola
He estado mirando ejemplos del uso del OVER() para evitar subconsultas y no me acabo de aclarar. He probado con este código y no obtengo lo que quiero:

declare @t table (c1 datetime,c2 datetime, c3 int, c4 int)
insert into @t values ('20160601', '19900101 8:15', 2,1)
,('20160601', '19900101 8:35', 1,2)
,('20160601', '19900101 8:20', 2,1)
,('20160601', '19900101 8:25', 3,2)
,('20160601', '19900101 8:30', 4,1)
--select * from @t
SELECT c1,datepart(hour,c2)
,sum(c3) over (partition by c1,datepart(hour,c2))
,count(c4) over (partition by c1,datepart(hour,c2),c4)
from @t
go

este es el resultado

2016-06-01 00:00:00.000 8 12 3
2016-06-01 00:00:00.000 8 12 3
2016-06-01 00:00:00.000 8 12 3
2016-06-01 00:00:00.000 8 12 2
2016-06-01 00:00:00.000 8 12 2

pero esperaba que como mismo aparece sum(c3)=12 (2+1+2+3+4) en cada fila tambien me saliera el count(c4) =2 pues en las 5 lineas hay solo 2 valores lo quie se repiten. Claro con algo tan sencillo como:

select c1,sum(c3),datepart(hour,c2),COUNT(distinct c4) from @t
group by c1,datepart(hour,c2)

logro el resultado esperado

2016-06-01 00:00:00.000 12 8 2

pero creía que ambas soluciones me daría el mismo resultado ¿ que estoy haciendo mal ?
Gracias.

Etiquetas: insert, select, totales, usando
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:35.