SQL - Consulta SQL (Transacciones por Hora-Mes)

 
Vista:
sin imagen de perfil

Consulta SQL (Transacciones por Hora-Mes)

Publicado por Roberto (5 intervenciones) el 13/10/2016 23:09:59
Buenas tardes,

La pregunta es si me pudiesen ayudar a revisar o mejorar la siguiente consulta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
SELECT
		V.Sucursal,
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 00:00:00' AND '2016/10/01 00:59:59' THEN V.Mov ELSE NULL END) AS [ 00 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 01:00:00' AND '2016/10/01 01:59:59' THEN V.Mov ELSE NULL END) AS [ 01 HRS],
                COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 02:00:00' AND '2016/10/01 02:59:59' THEN V.Mov ELSE NULL END) AS [ 02 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 03:00:00' AND '2016/10/01 03:59:59' THEN V.Mov ELSE NULL END) AS [ 03 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 04:00:00' AND '2016/10/01 04:59:59' THEN V.Mov ELSE NULL END) AS [ 04 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 05:00:00' AND '2016/10/01 05:59:59' THEN V.Mov ELSE NULL END) AS [ 05 HRS],
                COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 06:00:00' AND '2016/10/01 06:59:59' THEN V.Mov ELSE NULL END) AS [ 06 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 07:00:00' AND '2016/10/01 07:59:59' THEN V.Mov ELSE NULL END) AS [ 07 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 08:00:00' AND '2016/10/01 08:59:59' THEN V.Mov ELSE NULL END) AS [ 08 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 09:00:00' AND '2016/10/01 09:59:59' THEN V.Mov ELSE NULL END) AS [ 09 HRS],
                COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 10:00:00' AND '2016/10/01 10:59:59' THEN V.Mov ELSE NULL END) AS [ 10 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 11:00:00' AND '2016/10/01 11:59:59' THEN V.Mov ELSE NULL END) AS [ 11 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 12:00:00' AND '2016/10/01 12:59:59' THEN V.Mov ELSE NULL END) AS [ 12 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 13:00:00' AND '2016/10/01 13:59:59' THEN V.Mov ELSE NULL END) AS [ 13 HRS],
                COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 14:00:00' AND '2016/10/01 14:59:59' THEN V.Mov ELSE NULL END) AS [ 14 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 15:00:00' AND '2016/10/01 15:59:59' THEN V.Mov ELSE NULL END) AS [ 15 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 16:00:00' AND '2016/10/01 16:59:59' THEN V.Mov ELSE NULL END) AS [ 16 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 17:00:00' AND '2016/10/01 17:59:59' THEN V.Mov ELSE NULL END) AS [ 17 HRS],
                COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 18:00:00' AND '2016/10/01 18:59:59' THEN V.Mov ELSE NULL END) AS [ 18 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 19:00:00' AND '2016/10/01 19:59:59' THEN V.Mov ELSE NULL END) AS [ 19 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 20:00:00' AND '2016/10/01 20:59:59' THEN V.Mov ELSE NULL END) AS [ 20 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 21:00:00' AND '2016/10/01 21:59:59' THEN V.Mov ELSE NULL END) AS [ 21 HRS],
                COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 22:00:00' AND '2016/10/01 22:59:59' THEN V.Mov ELSE NULL END) AS [ 22 HRS],
		COUNT(CASE WHEN V.UltimoCambio BETWEEN '2016/10/01 23:00:00' AND '2016/10/01 23:59:59' THEN V.Mov ELSE NULL END) AS [ 23 HRS]
FROM Venta V
		INNER JOIN Sucursal S ON V.Sucursal = S.Sucursal
WHERE	V.Estatus IN  ('CONCLUIDO')
	AND V.FechaEmision BETWEEN '2016/10/01' AND '2016/10/01'
	AND V.Mov IN ('Ticket','Factura')
GROUP BY
	V.Sucursal
ORDER BY
	V.Sucursal;


Y el resultado que obtengo es el siguiente:

tabla

¿Qué deseo hacer?

Es que la consulta pueda tomar el mes completo, y no solo un día, ya que deseo saber en que horas del día existen mayor trafico de transacciones por parte de los puntos de venta.

Esperando de su ayuda. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.156
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta SQL (Transacciones por Hora-Mes)

Publicado por Isaias (1578 intervenciones) el 13/10/2016 23:30:44
¿En que motor de base de datos esta trabajando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta SQL (Transacciones por Hora-Mes)

Publicado por Roberto (5 intervenciones) el 13/10/2016 23:36:41
Se encuentra en SQL Server
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.156
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Consulta SQL (Transacciones por Hora-Mes)

Publicado por Isaias (1578 intervenciones) el 14/10/2016 00:28:16
Y si incluyes la FECHA y agrupas por la misma
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta SQL (Transacciones por Hora-Mes)

Publicado por Roberto (5 intervenciones) el 14/10/2016 00:44:28
He hecho otra consulta que esta así...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SELECT (SUBSTRING (CONVERT(CHAR(38), a.UltimoCambio,121), 1,10))Fecha,
       Datepart(hour,A.UltimoCambio) Hora,
       a.Sucursal,
       COUNT(*) TOTAL
  FROM Venta a, Sucursal b
 WHERE a.FechaEmision BETWEEN '2016/10/01' AND '2016/10/02'
   AND a.Sucursal = b.Sucursal
   AND a.Estatus = 'CONCLUIDO'
   AND a.Mov IN ('Ticket',
                 'Factura',
                 'Credito Fiscal',
                 'Factura Exportacion',
                 'Dev Factura',
                 'Nota Credito',
                 'Nota de Abono',
                 'Dev Ticket')
GROUP BY a.Sucursal,
         SUBSTRING ( CONVERT(CHAR(38), a.UltimoCambio,121), 1,10),
         Datepart(hour,a.UltimoCambio)
ORDER BY 1, 2, 3

Sin embargo los resultados los muestra de la siguiente manera.

tabla2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta SQL (Transacciones por Hora-Mes)

Publicado por Roberto (5 intervenciones) el 14/10/2016 02:15:57
Bueno, luego de darle algunas vueltas al asunto, respirar, caminar un poco y luego algo de Coca-Cola beber... Encontré la solución la cual comparto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
SELECT
		V.Sucursal,
		S.Nombre,
   		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '00' THEN V.Mov ELSE NULL END) AS [ 00 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '01' THEN V.Mov ELSE NULL END) AS [ 01 HRS],
                COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '02' THEN V.Mov ELSE NULL END) AS [ 02 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '03' THEN V.Mov ELSE NULL END) AS [ 03 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '04' THEN V.Mov ELSE NULL END) AS [ 04 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '05' THEN V.Mov ELSE NULL END) AS [ 05 HRS],
                COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '06' THEN V.Mov ELSE NULL END) AS [ 06 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '07' THEN V.Mov ELSE NULL END) AS [ 07 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '08' THEN V.Mov ELSE NULL END) AS [ 08 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '09' THEN V.Mov ELSE NULL END) AS [ 09 HRS],
                COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '10' THEN V.Mov ELSE NULL END) AS [ 10 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '11' THEN V.Mov ELSE NULL END) AS [ 11 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '12' THEN V.Mov ELSE NULL END) AS [ 12 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '13' THEN V.Mov ELSE NULL END) AS [ 13 HRS],
                COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '14' THEN V.Mov ELSE NULL END) AS [ 14 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '15' THEN V.Mov ELSE NULL END) AS [ 15 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '16' THEN V.Mov ELSE NULL END) AS [ 16 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '17' THEN V.Mov ELSE NULL END) AS [ 17 HRS],
                COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '18' THEN V.Mov ELSE NULL END) AS [ 18 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '19' THEN V.Mov ELSE NULL END) AS [ 19 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '20' THEN V.Mov ELSE NULL END) AS [ 20 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '21' THEN V.Mov ELSE NULL END) AS [ 21 HRS],
                COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '22' THEN V.Mov ELSE NULL END) AS [ 22 HRS],
		COUNT(CASE WHEN  DATEPART(hour,V.UltimoCambio) = '23' THEN V.Mov ELSE NULL END) AS [ 23 HRS]
FROM Venta V
		INNER JOIN Sucursal S ON V.Sucursal = S.Sucursal
WHERE	V.Estatus IN  ('CONCLUIDO')
	AND V.FechaEmision BETWEEN '2016/10/01' AND '2016/10/31'
	AND V.Mov IN ('Ticket','Factura','Credito Fiscal','Factura Exportacion')
GROUP BY
	V.Sucursal,
	S.Nombre
ORDER BY
	V.Sucursal;

Y el resultado es el siguiente:


tabla3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar