Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/09/2009, 16:54
7xtr3am
 
Fecha de Ingreso: marzo-2009
Mensajes: 73
Antigüedad: 15 años, 1 mes
Puntos: 1
nuevo COUNT para cada registro de un select

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.