Contar filas en con un subquery SQL Server

publicado por: Anonymous

Tengo el siguiente query:

SELECT DISTINCT 
     NoEconomico
    ,count(NoEconomico) AS Totales
FROM prm_FEMSA_IndicadoresTelemetria
WHERE RPMEventos <> 0
    AND AccountId = 9159
    AND FechaInicio BETWEEN '2016-11-27'
        AND '2016-12-31'
    AND CeEmplazamiento LIKE 'Celaya'
GROUP BY NoEconomico

Que me arroja los siguientes datos:

**NoEconomico              Totales**
CL0201/CEL10017          2
RCL018/CEL17698          5
RCL023/CEL10940          3
RCL026/CEL10931          2
RCL031/CEL10934          2
RCL033/CEL8243           4
RCL036/CEL17705          5
RCL042/CEL10945          3
RCL047-RCL048/CEL6957    5
RCL049-RCL050/CEL11449   5
RCL056/CEL8139           2
RCL102/CEL17695          1
RCL103/CEL10941          5
RCL105/CEL10939          1
RCL109/CEL10946          3
RCL113/CEL17703          2
RCL115/CEL17701          5
RCL122/CEL9986           1
RCL123/CEL6955           2
RCL135/CEL10932          3
RCL140/CEL17704          2
RCL141/CEL10938          2
RCL144/CEL17699          5
RCL145/CEL17700          5
RCL146/CEL11462          5
RCL154/CEL10935          3
RCL155/CEL17696          4
RCLD01/CEL10949          1
RCLTC2/CEL17702          5
RESERVA/CEL16138         2
RESERVA/CEL16177         1
RESERVA/CEL9897          3
RESERVA/CEL9927          2
RTL264/CEL18253          1

Mi pregunta es ¿cómo puedo hacer para que me cuente el total de las filas (registros), pero sin sumar los totales, es decir el NoEconomico. En total me estarían contando 34 registros, espero haberme explicado.

Mi resultado deseado sería así:

CeEmplazamiento   Total
Celaya              34

solución

No entiendo del todo porqué necesitas devolver CeEmplazamiento en el resultado, ya que forma parte de uno de los filtros. A menos que el filtro se pueda ajustar de forma que varios valores para CeEmplazamiento son posibles.

En todo caso, esto lo harías con un GROUP BY en una subquery dentro de otro GROUP BY:

SELECT CeEmplazamiento, COUNT(*)
  FROM (SELECT CeEmplazamiento, NoEconomico
          FROM prm_FEMSA_IndicadoresTelemetria
         WHERE RPMEventos <> 0
           AND AccountId = 9159
           AND FechaInicio BETWEEN '2016-11-27' AND '2016-12-31'
           AND CeEmplazamiento LIKE 'Celaya'
         GROUP BY CeEmplazamiento, NoEconomico) t
 GROUP BY CeEmplazamiento

Una mejor opción que se me ocurre es usar un COUNT(DISTINCT ..). Esto simplifica la consulta considerablemente:

SELECT CeEmplazamiento, COUNT(DISTINCT NoEconomico)
  FROM prm_FEMSA_IndicadoresTelemetria
 WHERE RPMEventos <> 0
   AND AccountId = 9159
   AND FechaInicio BETWEEN '2016-11-27' AND '2016-12-31'
   AND CeEmplazamiento LIKE 'Celaya'
 GROUP BY CeEmplazamiento
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *