Select Distinct.

09/09/2003 - 00:03 por Aníbal | Informe spam
Hola,
Como hago para seleccionar varios campos con una sola consulta SQL pero que
solo se fije si uno de ellos esta repetido.
Ejemplo:
Si pongo : "Select Distinct Campo1,Campo2,Campo3 From Tabla" me va a tomar
un solo registro si encuentra registros que tengan los tres campos repetidos
simultaneamente y todos los demas los va a mostrar.
Lo que yo pretendo es que el "Distinct" lo aplique solo al Campo1, o sea,
que seleccione todos los Campo1,Campo2,Campo3 y si encuentra registros donde
Campo1 este repetido, omita los duplicados.
Espero que se entienda.
Saludos.

Preguntas similare

Leer las respuestas

#1 Fernando España
09/09/2003 - 03:21 | Informe spam
bueno, eso es un problema de diseño de almacenamiento. dado que:

codigo valor descripcion
1 100 HOLA
1 200 HOLA
1 300 PEPE

supon que tienes tu tabla de esta forma..

seria dificil encontrar solo el primer registro para codigo cuando los datos
adicionales son distintos
en todo caso el distinct te seleccionaria los tres y un group by te
requeriria una funcion agregada para los siguientes datos
o usarlos como grupos que en todo caso seria lo mismo.

si unicamente quieres el primer dato de la columna codigo y cualquier dato
que aparezca de las demas, lo primero
que se me ocurre es un select distinct codigo into tabla_temporal
luego haces un select de 1 de la otra tabla basada en la tabla temporal,

Fernando España.



"Aníbal" wrote in message
news:%
Hola,
Como hago para seleccionar varios campos con una sola consulta SQL pero


que
solo se fije si uno de ellos esta repetido.
Ejemplo:
Si pongo : "Select Distinct Campo1,Campo2,Campo3 From Tabla" me va a tomar
un solo registro si encuentra registros que tengan los tres campos


repetidos
simultaneamente y todos los demas los va a mostrar.
Lo que yo pretendo es que el "Distinct" lo aplique solo al Campo1, o sea,
que seleccione todos los Campo1,Campo2,Campo3 y si encuentra registros


donde
Campo1 este repetido, omita los duplicados.
Espero que se entienda.
Saludos.



Respuesta Responder a este mensaje
#2 Javier Loria
09/09/2003 - 05:12 | Informe spam
Hola Anibal:
Aparte de lo mencionado por Fernando, podrias en vez de usar DISTINCT
usar un GROUP BY y funciones de AGRUPAMIENTO para seleccionar los valores.
Algo como:
SELECT Campo1,
MAX(Campo2),
MIN(Campo3)
FROM Tabla
GROUP BY Campo1
Porque si no SQL no sabe cual de todas las filas usar.
Ojo eso si que la ventaja es que la respuesta de Fernando que te da filas
verdaderas.

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.
Aníbal escribio:
Hola,
Como hago para seleccionar varios campos con una sola consulta SQL
pero que solo se fije si uno de ellos esta repetido.
Ejemplo:
Si pongo : "Select Distinct Campo1,Campo2,Campo3 From Tabla" me va a
tomar un solo registro si encuentra registros que tengan los tres
campos repetidos simultaneamente y todos los demas los va a mostrar.
Lo que yo pretendo es que el "Distinct" lo aplique solo al Campo1, o
sea, que seleccione todos los Campo1,Campo2,Campo3 y si encuentra
registros donde Campo1 este repetido, omita los duplicados.
Espero que se entienda.
Saludos.
Respuesta Responder a este mensaje
#3 Aníbal
09/09/2003 - 06:54 | Informe spam
Hola Fernando,
Me parece buena la idea del Select Into, pero me quedé pensado en lo que
digiste de que es un problema de diseño de almacenamiento, y me pregunto
como podría mejorarlo, o directamente restructurarlo.
La Tabla que estoy usando sirve para guardar Reservas de Viajes.
Y la Clave Principal es IdSerie.
Menos IdSerie y Pasajero todos los demas campos se tienen que poder repetir
ya que más de una persona podría hacer una reserva para la misma Fecha,
Hora,Origen,Destino
Entonces la tabla se podría ver así:

IdSerie Origen Destino Fecha Hora Pasajero Asiento Ventanilla/Pasillo
1 O1 D1 F1 H1 P1 5

Ventanilla
2 O1 D1 F1 H2 P2 16

Pasillo
3 O2 D2 F2 H3 P3 9

Ventanilla

Entonces yo quiero buscar de que viajes se han echo Reservas
(Origen,Destino) para una Fecha y Hora Ingresada por el usuario Estos datos
los voy a mostrar en un ListBox. Pero en una misma consulta también quiero
meter los demas datos para que cuando se seleccione en el ListBox una Fila
correspondiente a un Origen-Destino en Otro ListBox se muestren los
demás datos correpondiente a los pasajeros de cada Origen-Destino.
Entonces por eso necesito hacer un Select donde se seleccionen todos los
campos, pero sin repetisiones en el Origen y Destino por un lado, pero que
se puedan repetir todos los demás datos.
Pero hay está el problema ya que la clave principa hace que la clausula
Distinct siempre sea inservivle, queriendo tomar datos de todos los campos a
la vez.
Respuesta Responder a este mensaje
#4 Meir
09/09/2003 - 10:08 | Informe spam
Anibal,
Puedes definir un indice y decirle que ignore los duplicados:

CREATE UNIQUE INDEX Tabla_idx
ON Tabla(Campo1)
WITH IGNORE_DUP_KEY

Saludos
Meir

"Aníbal" wrote in message
news:%
Hola,
Como hago para seleccionar varios campos con una sola consulta SQL pero


que
solo se fije si uno de ellos esta repetido.
Ejemplo:
Si pongo : "Select Distinct Campo1,Campo2,Campo3 From Tabla" me va a tomar
un solo registro si encuentra registros que tengan los tres campos


repetidos
simultaneamente y todos los demas los va a mostrar.
Lo que yo pretendo es que el "Distinct" lo aplique solo al Campo1, o sea,
que seleccione todos los Campo1,Campo2,Campo3 y si encuentra registros


donde
Campo1 este repetido, omita los duplicados.
Espero que se entienda.
Saludos.



Respuesta Responder a este mensaje
#5 Fernando España
09/09/2003 - 15:41 | Informe spam
Anibal, si no entiendo mal, entonces tu problema no es de diseño ni en la
consulta en si, tu problema es en los parametros que necesitas para ejecutar
la consultas
por ejemplo decias que necesitas saber que datos existen para una fecha y
hora especifica, nomas debes agregar a tu select los parametros necesarios
ej.
Yo haria esto:

Select Distinct Origen,Destino from tabla where Fecha=@Fecha and hora=@hora
con esto lleanrias tu listbox como dices, pero no necesitas todo en tu
listbox sino unicamente el primer registro conicidente de los origenes y
destinos
asi que selecciona unicamente esos campos. tu listbox mostraria unicamente
Origen Destino
O1 D1
O2 D2

Seguido de eso, cuando el usuario seleccione una de esas columnas , deberas
crear otra sentencia que ejecutar que seria asi:

Select * from tabla where Fecha=@Fecha and hora=@hora and Origen=@origen and
destino=@destino

dado que decha y hora ya las tenias anteriormente, y origen y destino los
acabas de seleccionar. Asi tendras la informacion que necesitas
pero esto es mas un problema de tu front end y la forma como elaboras las
consultas
Solo tienes que idear la forma de realizar la consulta. saludos

Fernando España


"Aníbal" wrote in message
news:OaIx$
Hola Fernando,
Me parece buena la idea del Select Into, pero me quedé pensado en lo que
digiste de que es un problema de diseño de almacenamiento, y me pregunto
como podría mejorarlo, o directamente restructurarlo.
La Tabla que estoy usando sirve para guardar Reservas de Viajes.
Y la Clave Principal es IdSerie.
Menos IdSerie y Pasajero todos los demas campos se tienen que poder


repetir
ya que más de una persona podría hacer una reserva para la misma Fecha,
Hora,Origen,Destino
Entonces la tabla se podría ver así:

IdSerie Origen Destino Fecha Hora Pasajero Asiento


Ventanilla/Pasillo
1 O1 D1 F1 H1 P1 5

Ventanilla
2 O1 D1 F1 H2 P2 16

Pasillo
3 O2 D2 F2 H3 P3 9

Ventanilla

Entonces yo quiero buscar de que viajes se han echo Reservas
(Origen,Destino) para una Fecha y Hora Ingresada por el usuario Estos


datos
los voy a mostrar en un ListBox. Pero en una misma consulta también quiero
meter los demas datos para que cuando se seleccione en el ListBox una Fila
correspondiente a un Origen-Destino en Otro ListBox se muestren los
demás datos correpondiente a los pasajeros de cada Origen-Destino.
Entonces por eso necesito hacer un Select donde se seleccionen todos los
campos, pero sin repetisiones en el Origen y Destino por un lado, pero que
se puedan repetir todos los demás datos.
Pero hay está el problema ya que la clave principa hace que la clausula
Distinct siempre sea inservivle, queriendo tomar datos de todos los campos


a
la vez.






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