Rellenar huecos.

09/06/2004 - 17:29 por Jose Antonio | Informe spam
Tengo una tabla en la que una de sus columnas es un numero de orden que se
va añadiendo cuando se inserta una fila con un MAX(Orden)+1.

Si no se borra ninguna fila no hay ningun problema, pero si durante un
determinado tiempo se borran filas, se van quedando huecos y los numeros de
orden ya no estan todos seguidos.

¿Como se podrian renumerar la columna orden de las filas, empezando por 1
para que todas las filas tengan su numero de orden correlativo?.


Saludos

Preguntas similare

Leer las respuestas

#1 Javier Loria
09/06/2004 - 18:27 | Informe spam
Hola Jose:
Si tienes una Tabla con numeros es muy facil, asumamos que son Facturas:
=SELECT MIN(Numero)
FROM Facturas
LEFT JOIN Numeros
ON FacturaNum=Numero
WHERE FacturaNum IS NULL
= Si no quieres tener esta tabla, es poco mas complejo y lento pero puede
ser
=SELECT MIN(F1.NumFactura)+1 AS Numero
FROM Facturas F1
LEFT JOIN Facturas F2
ON F1.NumFacturaò.Numfactura-1
WHERE F2.Numfactura IS NULL
= Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Jose Antonio escribio:
Tengo una tabla en la que una de sus columnas es un numero de orden
que se va añadiendo cuando se inserta una fila con un MAX(Orden)+1.

Si no se borra ninguna fila no hay ningun problema, pero si durante un
determinado tiempo se borran filas, se van quedando huecos y los
numeros de orden ya no estan todos seguidos.

¿Como se podrian renumerar la columna orden de las filas, empezando
por 1 para que todas las filas tengan su numero de orden correlativo?.


Saludos
Respuesta Responder a este mensaje
#2 Jose Antonio
11/06/2004 - 11:12 | Informe spam
Gracias por la respuesta, pero lo que yo quiero es actualizar la tabla con
un Update con los nuevos numeros de orden.

Se Puede?.

Gracias
"Javier Loria" escribió en el mensaje
news:%23wjC%
Hola Jose:
Si tienes una Tabla con numeros es muy facil, asumamos que son


Facturas:
=> SELECT MIN(Numero)
FROM Facturas
LEFT JOIN Numeros
ON FacturaNum=Numero
WHERE FacturaNum IS NULL
=> Si no quieres tener esta tabla, es poco mas complejo y lento pero


puede
ser
=> SELECT MIN(F1.NumFactura)+1 AS Numero
FROM Facturas F1
LEFT JOIN Facturas F2
ON F1.NumFacturaò.Numfactura-1
WHERE F2.Numfactura IS NULL
=> Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Jose Antonio escribio:
> Tengo una tabla en la que una de sus columnas es un numero de orden
> que se va añadiendo cuando se inserta una fila con un MAX(Orden)+1.
>
> Si no se borra ninguna fila no hay ningun problema, pero si durante un
> determinado tiempo se borran filas, se van quedando huecos y los
> numeros de orden ya no estan todos seguidos.
>
> ¿Como se podrian renumerar la columna orden de las filas, empezando
> por 1 para que todas las filas tengan su numero de orden correlativo?.
>
>
> Saludos


Respuesta Responder a este mensaje
#3 Javier Loria
11/06/2004 - 15:24 | Informe spam
Hola Jose Antonio:
Umm, mantengo el ejemplo con las Factura aunque obviamente no aplica.
Si la siguiente sentencia me da una lista numerada:
SELECT F.Factura, COUNT(F2.*) AS Numero
FROM Facturas AS F
JOIN Facturas AS F2
ON F.Factura>ò.Factura
GROUP BY F.Factura
Entonces el Update debera ser:
UPDATE Facturas
SET Factura=Numero
FROM Facturas
JOIN (SELECT F.Factura, COUNT(F2.*) AS Numero
FROM Facturas AS F
JOIN Facturas AS F2
ON F.Factura>ò.Factura
GROUP BY F.Factura
) AS FacNuevas
ON Facturas.Factura=FacNuevas.Factura
Va sin probar asi que espero que no tenga errores de sintaxis y haber
entendido lo que deseabas.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Jose Antonio escribio:
Gracias por la respuesta, pero lo que yo quiero es actualizar la
tabla con un Update con los nuevos numeros de orden.

Se Puede?.

Gracias
"Javier Loria" escribió en el mensaje
news:%23wjC%
Hola Jose:
Si tienes una Tabla con numeros es muy facil, asumamos que son
Facturas: =>> SELECT MIN(Numero)
FROM Facturas
LEFT JOIN Numeros
ON FacturaNum=Numero
WHERE FacturaNum IS NULL
=>> Si no quieres tener esta tabla, es poco mas complejo y lento
pero puede ser
=>> SELECT MIN(F1.NumFactura)+1 AS Numero
FROM Facturas F1
LEFT JOIN Facturas F2
ON F1.NumFacturaò.Numfactura-1
WHERE F2.Numfactura IS NULL
=>> Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Jose Antonio escribio:
Tengo una tabla en la que una de sus columnas es un numero de orden
que se va añadiendo cuando se inserta una fila con un MAX(Orden)+1.

Si no se borra ninguna fila no hay ningun problema, pero si durante
un determinado tiempo se borran filas, se van quedando huecos y los
numeros de orden ya no estan todos seguidos.

¿Como se podrian renumerar la columna orden de las filas, empezando
por 1 para que todas las filas tengan su numero de orden
correlativo?.


Saludos
Respuesta Responder a este mensaje
#4 Jose Antonio
11/06/2004 - 17:20 | Informe spam
Ok. Javier funciona perfectamente.


Saludos

"Javier Loria" escribió en el mensaje
news:%
Hola Jose Antonio:
Umm, mantengo el ejemplo con las Factura aunque obviamente no aplica.
Si la siguiente sentencia me da una lista numerada:
> SELECT F.Factura, COUNT(F2.*) AS Numero
FROM Facturas AS F
JOIN Facturas AS F2
ON F.Factura>ò.Factura
GROUP BY F.Factura
> Entonces el Update debera ser:
> UPDATE Facturas
SET Factura=Numero
FROM Facturas
JOIN (SELECT F.Factura, COUNT(F2.*) AS Numero
FROM Facturas AS F
JOIN Facturas AS F2
ON F.Factura>ò.Factura
GROUP BY F.Factura
) AS FacNuevas
ON Facturas.Factura=FacNuevas.Factura
> Va sin probar asi que espero que no tenga errores de sintaxis y haber
entendido lo que deseabas.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
Jose Antonio escribio:
> Gracias por la respuesta, pero lo que yo quiero es actualizar la
> tabla con un Update con los nuevos numeros de orden.
>
> Se Puede?.
>
> Gracias
> "Javier Loria" escribió en el mensaje
> news:%23wjC%
>> Hola Jose:
>> Si tienes una Tabla con numeros es muy facil, asumamos que son
>> Facturas: => >> SELECT MIN(Numero)
>> FROM Facturas
>> LEFT JOIN Numeros
>> ON FacturaNum=Numero
>> WHERE FacturaNum IS NULL
>> => >> Si no quieres tener esta tabla, es poco mas complejo y lento
>> pero puede ser
>> => >> SELECT MIN(F1.NumFactura)+1 AS Numero
>> FROM Facturas F1
>> LEFT JOIN Facturas F2
>> ON F1.NumFacturaò.Numfactura-1
>> WHERE F2.Numfactura IS NULL
>> => >> Saludos,
>>
>>
>> Javier Loria
>> Costa Rica
>> Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
>> que pueda ser copiado y pegado al Query Analizer.
>> La version de SQL y Service Pack tambien ayuda.
>> Jose Antonio escribio:
>>> Tengo una tabla en la que una de sus columnas es un numero de orden
>>> que se va añadiendo cuando se inserta una fila con un MAX(Orden)+1.
>>>
>>> Si no se borra ninguna fila no hay ningun problema, pero si durante
>>> un determinado tiempo se borran filas, se van quedando huecos y los
>>> numeros de orden ya no estan todos seguidos.
>>>
>>> ¿Como se podrian renumerar la columna orden de las filas, empezando
>>> por 1 para que todas las filas tengan su numero de orden
>>> correlativo?.
>>>
>>>
>>> Saludos


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida