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

Conteo de registros con 0

Estas en el tema de Conteo de registros con 0 en el foro de SQL Server en Foros del Web. Tengo una pregunta, estoy realizando una consulta SQL que tiene registros de autos y sus colores, realice una consulta para contar que colores se estaban ...
  #1 (permalink)  
Antiguo 26/04/2016, 09:17
 
Fecha de Ingreso: abril-2016
Mensajes: 4
Antigüedad: 8 años
Puntos: 0
Conteo de registros con 0

Tengo una pregunta, estoy realizando una consulta SQL que tiene registros de autos y sus colores, realice una consulta para contar que colores se estaban utilizando:
Código SQL:
Ver original
  1. SELECT COLOR,COUNT(COLOR) TOTAL FROM Autos
  2. INNER JOIN Colores ON Autos.COLORID=Colores.ColorId
  3. GROUP BY COLOR ORDER BY TOTAL DESC
y tengo como resultado:
Rojo = 3
Verde =1

Ahora mi pregunta es, tengo colores que no uso, como puedo hacer para que al contar me aparezca un 0, por ejemplo
Rojo = 3
Negro = 0
Azul = 0

Última edición por gnzsoloyo; 26/04/2016 a las 09:38
  #2 (permalink)  
Antiguo 26/04/2016, 09:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Conteo de registros con 0

De manual: LEFT JOIN

Código SQL:
Ver original
  1. SELECT
  2.     COLOR, COUNT(COLOR) TOTAL
  3. FROM colores c LEFT JOIN Autos A ON C.COLORID=A.ColorId
  4. WHERE TRUE OR A.ColorId  IS NULL
  5. GROUP BY COLOR
  6. ORDER BY TOTAL DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 26/04/2016, 09:55
 
Fecha de Ingreso: abril-2016
Mensajes: 4
Antigüedad: 8 años
Puntos: 0
Respuesta: Conteo de registros con 0

Cita:
Iniciado por gnzsoloyo Ver Mensaje
De manual: LEFT JOIN

Código SQL:
Ver original
  1. SELECT
  2.     COLOR, COUNT(COLOR) TOTAL
  3. FROM colores c LEFT JOIN Autos A ON C.COLORID=A.ColorId
  4. WHERE TRUE OR A.ColorId  IS NULL
  5. GROUP BY COLOR
  6. ORDER BY TOTAL DESC
Con el True me manda un error
Se especificó una expresión no booleana en un contexto donde se esperaba una condición, cerca de 'a'.
  #4 (permalink)  
Antiguo 26/04/2016, 10:06
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Conteo de registros con 0

Prueba con algo como esto:

Código SQL:
Ver original
  1. CREATE TABLE #autos
  2. (
  3. auto nvarchar(20),
  4. id_color INT
  5. )
  6.  
  7. CREATE TABLE #colores
  8. (
  9. id INT,
  10. color nvarchar(20)
  11. )
  12.  
  13.  
  14. INSERT INTO #autos VALUES ('auto1',1)
  15. INSERT INTO #autos VALUES ('auto2',1)
  16. INSERT INTO #autos VALUES ('auto3',1)
  17.  
  18. INSERT INTO #colores VALUES (1,'rojo')
  19. INSERT INTO #colores VALUES (2,'verde')
  20.  
  21.  
  22. SELECT SUM(contador) AS total, color FROM(
  23. SELECT CASE WHEN isnull(t2.id_color,0)=0 THEN 0 ELSE t1.id END AS contador, color --count(*) as total, color
  24. FROM #colores AS t1
  25. LEFT JOIN #autos AS t2 ON (t2.id_color=t1.id)
  26. ) AS completa GROUP BY color

Resultado:
3 rojo
0 verde
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 26/04/2016, 10:25
 
Fecha de Ingreso: abril-2016
Mensajes: 1
Antigüedad: 8 años
Puntos: 0
Respuesta: Conteo de registros con 0

Algo mas simple.

Código SQL:
Ver original
  1. SELECT Colores.COLOR,COUNT(Autos.COLOR) TOTAL FROM Colores
  2. LEFT JOIN Autos  ON Colores.ColorId = Autos.COLORID
  3. GROUP BY Colores.COLOR ORDER BY 2 DESC

Última edición por gnzsoloyo; 26/04/2016 a las 11:35

Etiquetas: count, filtrar, query, server, sql
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 09:47.