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

Contar registros que cumplan una condicion

Estas en el tema de Contar registros que cumplan una condicion en el foro de SQL Server en Foros del Web. Hola a todos. Manejo Sql Server 2000 como motor de base de datos. Tengo una tabla AREAS y una tabla CODIGOS. Cada código está relacionado ...
  #1 (permalink)  
Antiguo 30/09/2008, 23:20
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Contar registros que cumplan una condicion

Hola a todos. Manejo Sql Server 2000 como motor de base de datos. Tengo una tabla AREAS y una tabla CODIGOS. Cada código está relacionado con un área en AREAS y tiene un atributo USADO (de tipo bit). Quiero una consulta que me liste TODAS LAS AREAS contando además cuantos códigos cumplen con USADO = 1.
Actualmente la consulta que manejo es la siguiente:

SELECT Areas.Nombre, Count(*) As Total FROM Areas, Codigos WHERE Codigos.Area_Id = Areas.Id And Codigos.Usado = 1

Está consulta funciona bien cuando al menos uno de los códigos relacionados con el área tiene USADO = 1, pero si esto no lo cumple ninguno entonces directamente no me devuelve ese registro, cuando en realidad quiero que me devuelva el nombre del área y 0 como total de registros que tienen el atributo USADO = 1.
No sé si me habré explicado bien, gráficamente sería algo así:

Código:
Tabla Areas
--------------
Id                   Nombre                        
---                  --------------
1                    Area1
2                    Area2
3                    Area3

Tabla Codigos
------------------
Id      Codigo        Usado     Area_Id
---     -----------     ---------    ----------
1       52456             1              1
2       41525             0              1
3       25687             1              2
4       25446             1              2
5       14564             1              2
6       12546             0              3
Actualmente, esto me devuelve:

Código:
Nombre            Total
----------            ------
Area1                  1
Area2                  3
Cuando en realidad quiero que me devuelva:
Código:
Nombre            Total
----------            -------
Area1                  1
Area2                  3
Area3                  0
Espero que alguien pueda darme una mano con esto. Estaré muy agradecido si así es.
Un abrazo.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 01/10/2008, 00:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Contar registros que cumplan una condicion

Prueba esto (yo no lo he probado). La sintaxis es para MySQL, pero si adaptas lo que parezca necesario, hará, creo, lo que quieres...

Código sql:
Ver original
  1. SELECT Areas.id, Areas.nombre, IFNULL(t1.Tot,0) AS Total FROM Areas LEFT JOIN
  2. (SELECT Areas.Id, COUNT(*) AS Tot FROM Areas INNER JOIN Codigos ON Codigos.Area_Id = Areas.Id
  3.  WHERE Codigos.Usado = 1 GROUP BY Areas.id)t1 ON Areas.id=t1.id ORDER BY Areas.nombre
  #3 (permalink)  
Antiguo 03/10/2008, 14:15
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Contar registros que cumplan una condicion

Código:
SELECT Areas.Nombre, Count(*) As Total FROM Areas, Codigos 
WHERE Codigos.Area_Id =* Areas.Id And Codigos.Usado = 1
GROUP BY Areas.Nombre
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
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 07:26.