Vista de elementos duplicados en una tabla .

27/06/2004 - 21:20 por MhBeyle | Informe spam
Estoy parado con lo siguiente :

Tengo una tabla en la que quiero anular aquellas filas duplicadas cuyo
valor sea Nulo.

Me explico :

01 UNO Null
02 DOS Null
02 DOS XXXX
03 TRES Null
04 CUATRO Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null

Quiero filtrar esta tabla a partir del valor YYYY y quiero que la
Vista me devuelva lo siguiente :

01 UNO Null
02 DOS Null
03 TRES Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null

A lo mejor es muy fácil hacer esto, pero estoy bastante perdido.
¿Alguna idea?

MhBeyle __

Preguntas similare

Leer las respuestas

#1 MAXI
28/06/2004 - 04:42 | Informe spam
Hola y porque quieres devolver YYY con los nulos? si quieres buscar todos
los valores nulos deberias poner un IS NULL en el Where y para saber si hay
duplicados lo que podrias hacer es un Count(*) agrupado por campoid y luego
un having donde ese Count sea > 1, me explico?




Maxi

Buenos Aires - Argentina

Desarrollador .NET 3 Estrellas

Mail: Maxi_accotto[arroba]speedy.com.ar

MSN:


"MhBeyle" escribió en el mensaje
news:
Estoy parado con lo siguiente :

Tengo una tabla en la que quiero anular aquellas filas duplicadas cuyo
valor sea Nulo.

Me explico :

01 UNO Null
02 DOS Null
02 DOS XXXX
03 TRES Null
04 CUATRO Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null

Quiero filtrar esta tabla a partir del valor YYYY y quiero que la
Vista me devuelva lo siguiente :

01 UNO Null
02 DOS Null
03 TRES Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null

A lo mejor es muy fácil hacer esto, pero estoy bastante perdido.
¿Alguna idea?

MhBeyle __
Respuesta Responder a este mensaje
#2 MhBeyle
28/06/2004 - 12:43 | Informe spam
On Sun, 27 Jun 2004 23:42:10 -0300, "MAXI"
wrote:

Hola y porque quieres devolver YYY con los nulos? si quieres buscar todos
los valores nulos deberias poner un IS NULL en el Where y para saber si hay
duplicados lo que podrias hacer es un Count(*) agrupado por campoid y luego
un having donde ese Count sea > 1, me explico?



Te explicas, sí, te explicas, pero necesito tener esos valores. La
consulta con los valores nulos está clara. La consulta con los YYYY
está clara. Pero la consulta que me devuelva los YYYY con los nulos y
elimine, de los duplicados, sólo los nulos, ya no está tan clara ...
:)

Lo que me falta es una consulta que me busque los valores duplicados
por la segunda columna y me elimine el que sea nulo de todos ellos.
Después puedo unir las consultas con un UNION .

Tabla
01 UNO Null
02 DOS Null
02 DOS XXXX
03 TRES Null
04 CUATRO Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null

Quiero filtrar esta tabla a partir del valor YYYY y quiero que la
Vista me devuelva lo siguiente :

01 UNO Null
02 DOS Null
03 TRES Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null
Respuesta Responder a este mensaje
#3 Javier Loria
28/06/2004 - 16:26 | Informe spam
Hola:
Espero haber entendido:
==SELECT Columna1
, Columna2
, MAX(Columna3)
FROM Tabla1
WHERE COALESCE(Columna3,'YYYY')='YYYY'
GROUP BY Columna1, Columna2
== 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.

MhBeyle escribio:
Estoy parado con lo siguiente :

Tengo una tabla en la que quiero anular aquellas filas duplicadas cuyo
valor sea Nulo.

Me explico :

01 UNO Null
02 DOS Null
02 DOS XXXX
03 TRES Null
04 CUATRO Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null

Quiero filtrar esta tabla a partir del valor YYYY y quiero que la
Vista me devuelva lo siguiente :

01 UNO Null
02 DOS Null
03 TRES Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null

A lo mejor es muy fácil hacer esto, pero estoy bastante perdido.
¿Alguna idea?

MhBeyle __
Respuesta Responder a este mensaje
#4 MhBeyle
28/06/2004 - 18:20 | Informe spam
On Mon, 28 Jun 2004 08:26:42 -0600, "Javier Loria"
wrote:

Hola:
Espero haber entendido:
==>SELECT Columna1
, Columna2
, MAX(Columna3)
FROM Tabla1
WHERE COALESCE(Columna3,'YYYY')='YYYY'
GROUP BY Columna1, Columna2
==> Saludos,



Está bien, pero hay que suponer que el valor 'YYYY' podría repetirse
varias veces a lo largo de la tabla. Error mío al no especificar este
dato.

Es decir, podríamos tener:

01 UNO Null
02 DOS Null
02 DOS XXXX
03 TRES Null
04 CUATRO Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null
06 SEIS YYYY
07 SIETE Null
08 OCHO Null
08 OCHO XXXX
09 NUEVE Null
09 NUEVE XXXX

Y tomando como referencia el valor 'YYYY', nos quedaría :

01 UNO Null
02 DOS Null
03 TRES Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS YYYY
07 SIETE Null
08 OCHO Null
09 NUEVE

Con el valor MAX de la tu SELECT, nos filtraría sólo la 'XXXX', al ser
este el valor que aparece mayor número de veces.

Perdona que no haya especificado más. Espero no olvidarme de nada
ahora.

Un saludo,

MhBeyle ____
Respuesta Responder a este mensaje
#5 MhBeyle
28/06/2004 - 19:30 | Informe spam
On Mon, 28 Jun 2004 18:20:49 +0200, MhBeyle
wrote:

Rizo el rizo un poco más . Espero no ser demasiado pesado y no haber
atraido tu curiosidad hasta el punto de hacer saltar tu cerebro ... :)

Hay que suponer que, en un futuro, la Tabla pueda tener otra Columna,
con lo que las cosas quedarían así:


01 UNO Null Null
02 DOS Null Null
02 DOS XXXX AA
03 TRES Null Null
04 CUATRO Null Null
04 CUATRO YYYY BB
05 CINCO Null Null
06 SEIS Null Null
06 SEIS YYYY AA
07 SIETE Null Null
08 OCHO Null Null
08 OCHO XXXX AA
09 NUEVE Null Null
09 NUEVE XXXX BB

Y tomando como referencia el valor 'YYYY', nos quedaría :

01 UNO Null Null
02 DOS Null Null
03 TRES Null Null
04 CUATRO YYYY BB
05 CINCO Null Null
06 SEIS YYYY AA
07 SIETE Null Null
08 OCHO Null Null
09 NUEVE Null Null

Bajo mi punto de vista, el asunto consistiría en hacer un SELECT para
filtrar las columnas repetidas en su Columna1. De esa primera SELECT
habría que utilizar una UNION o un NOT IN para dejar sólo las filas
cuyos campos sean Null. Después habría que crear otra SELECT con todos
los registros filtrados por el valor 'YYYY' y el valor NUll y asociar
esta nueva SELECT a la anterior mediante otro NOT IN o una UNION, que
eliminaría las filas con valores Null y dejaría la tabla con el
resultado que te pongo más arriba.

¿Me equivoco o se puede conseguir esto con algo más simple?

MhBeyle ___


On Mon, 28 Jun 2004 08:26:42 -0600, "Javier Loria"
wrote:

Hola:
Espero haber entendido:
==>>SELECT Columna1
, Columna2
, MAX(Columna3)
FROM Tabla1
WHERE COALESCE(Columna3,'YYYY')='YYYY'
GROUP BY Columna1, Columna2
==>> Saludos,



Está bien, pero hay que suponer que el valor 'YYYY' podría repetirse
varias veces a lo largo de la tabla. Error mío al no especificar este
dato.

Es decir, podríamos tener:

01 UNO Null
02 DOS Null
02 DOS XXXX
03 TRES Null
04 CUATRO Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS Null
06 SEIS YYYY
07 SIETE Null
08 OCHO Null
08 OCHO XXXX
09 NUEVE Null
09 NUEVE XXXX

Y tomando como referencia el valor 'YYYY', nos quedaría :

01 UNO Null
02 DOS Null
03 TRES Null
04 CUATRO YYYY
05 CINCO Null
06 SEIS YYYY
07 SIETE Null
08 OCHO Null
09 NUEVE

Con el valor MAX de la tu SELECT, nos filtraría sólo la 'XXXX', al ser
este el valor que aparece mayor número de veces.

Perdona que no haya especificado más. Espero no olvidarme de nada
ahora.

Un saludo,

MhBeyle ____
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida