2008-11-06 21 views
14

Tengo una base de datos de acceso de MS y necesitaría crear una consulta de SQL que me permita seleccionar todas las entradas no distintas en una columna sin perder todos los valores.Múltiple NO distinto

En este caso, más que nunca, un ejemplo es un valor de miles de palabras:

Tabla:

A B C 
1 x q 
2 y w 
3 y e 
4 z r 
5 z t 
6 z y 

magia SQL

Resultado:

B C 
y w 
y e 
z r 
z t 
z y 

Básicamente elimina todos los valores únicos de colum n B pero mantiene las múltiples filas de los datos guardados. Puedo "agrupar por b" y luego "contar> 1" para obtener el no distintivo, pero el resultado solo mostrará una fila de B, no las 2 o más que necesito.

¿Algún ayuda?

Gracias.

Respuesta

26
Select B, C 
From Table 
Where B In 
    (Select B From Table 
    Group By B 
    Having Count(*) > 1) 
3
select 
    * 
from 
    my_table t1, 
    my_table t2 
where 
    t1.B = t2.B 
and 
    t1.C != t2.C 

-- apparently you need to use <> instead of != in Access 
-- Thanks, Dave! 

Algo así?

+0

Esto está cerca, pero hay que utilizar <> en lugar de = Acceda!. –

+0

Um, ¿por qué ofrecerías una respuesta sobre Jet SQL sin probar el SQL en Access o alguna forma de Jet? ¿Por qué publicar una respuesta que no sabe va a funcionar (como hubiera averiguado si hubiera gastado los 3 segundos que lleva pegar el SQL con! = En la cuadrícula QBE de acceso)? –

+3

¿Porque no uso Access y no tengo una instalación disponible para mí? El objetivo de mi publicación fue que puedes usar la misma tabla dos veces en SQL normal (probablemente tampoco funcione en Access, por lo que sé). – a2800276

1

une los valores únicos de B que has determinado con group by b count> 1 a la tabla original para recuperar los valores C de la tabla.

7

Otra forma de devolver los resultados que desea sería la siguiente:

select * 
from 
    my_table 
where 
    B in 
    (select B from my_table group by B having count(*) > 1)