Intentando dividir una SUMA con CASE por la cuenta total de viajes y retornar el porcentaje.
Tengo dos tablas: Viajes y Usuarios.
Estoy tratando de escribir una consulta SQL para encontrar la tasa de cancelación de solicitudes con usuarios sin bloqueo (tanto el cliente como el conductor no deben estar bloqueados) cada día entre “2013-10-01” y “2013-10-03”. Redondea la tasa de cancelación en un porcentaje de salida.
Entonces, en mi caso, si el total de viajes es 4 y las cancelaciones son 2, quiero ver 0.50 o si son 3 y 1, 0.33.
Aquí está lo que estaba intentando hacer hasta ahora…
Con CTE AS (
Seleccionar Request<em>at como [DÍA],
SUM (CASE
Cuando Estado= 'cancelado</em>por<em>conductor' o Estado='cancelado</em>por<em>cliente' ENTONCES 1
Sino 0
FIN)<br>
como Cancelaciones,
Contar(*) como TotalViajes
DE Viajes
Donde IDCliente NO EN (SELECCIONAR [IDUsuario] DE [Estudio].[dbo].[Usuarios] Donde Bloqueado='SÍ' y Rol='Cliente') o IDConductor NO EN (SELECCIONAR [IDUsuario] DE [Estudio].[dbo].[Usuarios] Donde Bloqueado='SÍ' y Rol='Conductor')
Agrupar Por Request<em>at )
Seleccionar DÍA, ((TotalViajes/Cancelaciones) *100) como TasaCancelación
De CTE
Pero la función de división no está funcionando. No estoy seguro de cómo abordarlo de otra manera.
Este es el error que estoy obteniendo.
https://i.stack.imgur.com/yVkfh.jpg
Cualquier ayuda es apreciada.
davy.ai
Consulta SQL para la tasa de cancelación
Para encontrar la tasa de cancelación de solicitudes con usuarios no bloqueados, podemos utilizar la siguiente consulta SQL:
En esta consulta, primero utilizamos una expresión de tabla común (CTE) para calcular el número de cancelaciones y el total de viajes para cada día entre el 1 de octubre y el 3 de octubre de 2013. Excluimos los viajes en los que el cliente o el conductor están bloqueados.
Para el resultado final, dividimos el número de cancelaciones entre el total de viajes y multiplicamos por 100 para obtener la tasa de cancelación como un porcentaje. También redondeamos el resultado a 2 decimales.
Ten en cuenta que necesitamos convertir la columna
Cancelaciones
aFLOAT
para poder realizar la división correctamente.