La estructura de mi bd y tablas y campos es muy compleja por eso solo pondré un ejemplo, además mi intención es aprender y no hacer que hagan las cosas por mi, me gustaría hacerlo yo solo que ya me lie y ya no me sale. No se me ocurre que mas. A ver si me pueden ayudar.
Bueno la cosa es que tengo una tabla con 900 registros los campos originales eran digamos: id, nombre, apellido, edad, género, especialidad. Digamos que se el agrego un campo matricula y cada registro se hiso update a: la primera letra del apellido concatenada con la cadena ‘001’. De modo que si hay 50 personas con la M en el apellido habrá 50 matriculas que digan M001.
La matricula La cual es de la siguiente forma: X999, donde X es la primera letra del apellido y 999 es un número del 001 y va aumentando de 1 en uno. De tal modo que si tengo a los siguientes registros, las matriculas SERIAN :
Pérez Juan P001
Mesa Luis M001
Cota José C001
Trejo Alberto T001
Muños Érica M002
Matías Federico M003
Rulfo miguel R001
Púnica melisa P002
Es decir, la numeración 001-999 comienza con cada letra. Trate de hacer el update con el siguiente código pero no me sale. Mi intención era que en el update en: “set a.matricula” se le asigne el total al primer registro (digamos que avía 50 con al letra M), al segundo como se supone que hay un M050 y 49 M001 se supone que se el agregaría M049. Al 3ero, como hay un M050, un M0949 y cuarenta y ocho M001 quedaría M048 y asi sucesivamente. Pero mi consulta SQL solo hace el COUNT una ves y a todos les pone 50.
La pregunta es:
Hay alguna forma de hacer que el SELECT COUNT se haga de nuevo para cada registro?
Código:
update
alumno a,
(
SELECT
matricula
FROM
(
SELECT
id_alumno,
correo,
ap_paterno,
matricula,
count( matricula ) AS total
FROM
alumno
GROUP BY matricula
ORDER BY total DESC , matricula
)t1
WHERE
total >1
)m
set a.matricula=concat(
substr(a.matricula, 1, 4 ),
(case
when m.total<10 then '00'
when m.total<100 then '0'
else ''
end),
m.total
)
WHERE
a.matricula = m.matricula
de antemano, gracias.