2009-03-26 80 views
6

Estoy tratando de averiguar cómo seleccionar la mitad de los registros donde una ID es nula. Quiero la mitad porque voy a usar ese conjunto de resultados para actualizar otro campo de ID. Luego voy a actualizar el resto con otro valor para ese campo ID.Seleccione solo la mitad de los registros

Básicamente, quiero actualizar la mitad de los registros de algún Campo ID con un número y el resto con otro número dividiendo la actualización básicamente entre dos valores para algún Campo ID del campo que deseo actualizar.

Respuesta

11

En Oracle puede utilizar la columna de pseudor ROWNUM. Creo en el servidor sql puede usar TOP. Ejemplo:

select TOP 50 PERCENT * from table 
+0

¿Hay una especie de 50 por ciento inferior? por ejemplo, digamos que tiene 100 registros, abajo serían los últimos 50? – PositiveGuy

+1

Use the Order by clause –

6

Se pueden seleccionar por ciento:

SELECT TOP 50 PERCENT *fields* FROM YourTable WHERE ... 
1

El siguiente código SQL devolverá el col_ids de la primera mitad de la tabla.

SELECT col_id FROM table 
WHERE rownum <= (SELECT count(col_id)/2 FROM table); 

Si el número total de col_ids es un número impar por lo que recibirá la primera mitad - 1. Esto se debe a que, por ejemplo, tenemos 51 registros totales, el conteo (col_id)/2 devuelve 25,5, y como no hay rownum igual a este resultado, obtenemos todo igual a 25 y menos. Eso significa que los otros 26 no son devueltos.

Sin embargo, no he visto el trabajo afirmación inversa:

SELECT col_id FROM table 
WHERE rownum > (SELECT count(col_id)/2 FROM table); 

Así que si quieres la otra mitad de la tabla, sólo podía almacenar los primeros resultados en una tabla temporal, le llaman TABLE_A. A continuación, sólo hacer MENOS en la tabla original de esta tabla:

SELECT col_id FROM table
MENOS
SELECT col_id FROM table_a

Esperamos que esto ayude a alguien.

Cuestiones relacionadas