Contar registros en access

Hay una Tabla que contiene tres campos,
Campo1 Campo2 Campo3
1 16 990101
1 16 990101
1 16 990101
1 16 990101 Así hasta N veces
2 21 990101 Igual hasta N veces
Necesito marcar como válido cuando Campo3 tenga un total de 3 registros como válidos y los demás marcarlos como no válidos
1

1 Respuesta

51.275 pts. Experto en sistemas de información http://dataage
Para poder marcarlos primero deberás crear un nuevo campo donde dejarás la marca. Por ejemplo de nombre "marca" y que sea de 1 carácter donde pondrás B para los buenos, y M para los malos.
Luego creas una consulta, seleccionas la tabla y pones vista SQL, aquí vas a tener que poner la siguiente actualización para los buenos:
Update nombre_tabla
Set marca = 'B'
Where campo3 IN (select campo3
                               From nombre_tabla
                               Group by campo3
                               Having count(*) = 3);
Deberás de cambiar "nombre_tabla" por el nombre de tu tabla, y "marca" por el nombre del nuevo campo que creaste.
Ejecutas esta consulta, que al ponerle Update te queda como consulta de actualización. Luego te pregunta si vas a grabar los cambios.
Ahora para los malos tienes dos opciones 1 usas la misma pero en lugar de "IN" pones "NOT IN", y por supuesto debes de tener "Set marca = 'M'"
La otra opción es partiendo que los valores iniciales están nulos, actualizas los datos que en marca están nulos
Update nombre_tabla
Set marca = 'M'
Where marca is null;
El procedimiento para correrla es igual que en la anterior.
La consulta me cuenta el Campo3 pero no me hace lo siguiente
Campo1 Campo2 Campo3
1 16 99
1 16 99, hasta N veces, necesito que me cuente el campo1 y el campo2 también que me acumule en la base de datos, que cuando se le agregue un nuevo registro al mismo Campo2, lo marque como válido mientras que sea menor que 16 registros con la misma condición
Si se trata de los tres campos sería así:
Update nombre_tabla t1
Set marca = 'B'
Where exists (select campo3
              From nombre_tabla t2
              where t1.campo1 = t2.campo1
                and t1.campo2 = t2.campo2
                and t1.campo3 = t2.campo3
              Group by campo1, campo2, campo3
              Having count(*) = 3);
No te entiendo que quieres hacer con el campo 2, necesito que me aclares más, o me indicas funcionalmente que es lo que tienes que hacer.
Me avisas.
http://www.thedataage.com
La idea es la siguiente: Yo tengo un PACIENTE al que le puedo hacer hasta 16 Sellantes (4 por Cuadrante), se le puede hacer en diferente periodo de tiempo, cuando Yo le voy a pagar Necesito Contar hasta 16, y que me diga que son los válidos, si se pasa de 16 me debe marcar los 16 Válidos y debe decirme cuales son los No válidos, las variables osn
Documento, Actividad
Cedula del paciente Sellante
16284615 927101
Vamos a ver, continúo perdido con tus segundos comentarios.
Por lo que dices y asumiendo que el código de sellante no se repite estábamos mejor encaminados en la primer parte.
Esta vez vamos a hacer una consulta directamente para los válidos (los que tienen 16 o menos sellantes).
De esta manera obtenemos los válidos
select *
from nombre_tabla a
where codigo_sellante in (select top 16 codigo_sellante from nombre_tabla b where b.documento_cliente = a.documento_cliente);
De esta manera obtenemos los que te pasaste.
select *
from nombre_tabla a
where codigo_sellante not in (select top 16 codigo_sellante from nombre_tabla b where b.documento_cliente = a.documento_cliente);
En ambas consultas estoy asumiendo que el código de sellante se incrementa con el tiempo de manera de dejar como válidos los más viejos. De no ser así y requerir que
nos quedemos con los primeros registros ingresados es conveniente agregarle la fecha en las consultas
De esta manera obtenemos los válidos
select *
from nombre_tabla a
where fecha_actividad & codigo_sellante in (select top 16 fecha_actividad & codigo_sellante from nombre_tabla b where b.documento_cliente = a.documento_cliente);
De esta manera obtenemos los que te pasaste.
select *
from nombre_tabla a
where fecha_actividad & codigo_sellante not in (select top 16 fecha_actividad & codigo_sellante from nombre_tabla b where b.documento_cliente = a.documento_cliente);
Si el código de sellante se repite deberás agregarle más campos a las consultas del IN de manera de dejar registros únicos
Si deseas marcarlos a los registros como al inicio solo cambia las consultas por el update con los mismos criterios.
Cualquier cosa me avisas.
Hermano, le agradezco su colaboración, la idea no se la pude transmitir, el código de sellantes es el mismo rn una tabla 997102, se pueden hacer en diferentes fechas y el usuario el el mismo, solo hay una tabla
Sellante, Usuario, Fecha, Factura.
Ayúdeme con lo siguiente, tengo un formulario en access, tiene los siguientes campos:
NoRadicado, Prestador, Fecha, Usuario, Control
Como hago para que al hacer clic en un Botón me cree un Directorio exactamente con LOS VALORES DE LOS CAMPOS
C:\27656_ESE_01012009_LARP_CT001\
Y luego le copie unos archivos que tengo en C:\PLANOS\*.TXT
Ayúdeme con esto, por favor es urgente

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas