2013-03-18 13 views
8

voglio usare distinti & superiore nello stesso tempo, ho fattoUsando DISTINCT e TOP allo stesso tempo

SELECT distinct TOP 10 * FROM TableA

ma ho ancora un duplicato PersonID così ho insegnato a fare:

SELECT distinct (personID) TOP 10 * FROM TableA ma la sintassi è sbagliato, quindi mi chiedo se non v'è alcuna soluzione

grazie,

+0

Cosa farai se vuoi scegliere un solo 'personID' se hai righe duplicate? –

risposta

22

Stai utilizzando un SELECT * che sta inserendo tutti i record. Se si desidera utilizzare un vero DISTINCT, elencare solo la colonna a cui si desidera ricevere valori distinti. Se hai più colonne, tutte quelle colonne combinate formano un record distinto.

SELECT distinct TOP 10 personID 
FROM TableA 

Nota che senza una ORDER BY questo restituirà i primi 10 record in nessun ordine particolare. I risultati potrebbero essere diversi ogni volta che si esegue la query.

-1

ho riparato ho fatto

select distinct personid from (SELECT TOP 10 * FROM TableA) 
+0

Senza un ordine dai risultati può variare. Anche un tavolo con PK non è garantito per restituire lo stesso ordine senza un ordine da parte di. – Paparazzi

+0

se hai lo stesso personaggio nei tuoi primi 10 risultati, allora questo non funzionerà, otterresti solo 9 risultati. È semplice come 'SELEZIONA distinta TOP 10 personID FROM TableA' –

0

È sembrano voler 10 record casuali per persone diverse. Prova questo:

select t.* 
from (select t.*, 
      row_number() over (partition by personid order by (select NULL)) as seqnum 
     from t 
    ) t 
where seqnum = 1 

In generale, però, quando si utilizza top si dovrebbe anche utilizzare un order by per specificare cosa si intende per "top".

1

selezionare personId distinto dal campione TableA 10

Questo funziona in Teradata

0

Funziona semplicemente se si utilizza query come questa:

SELECT DISTINCT TOP 2 name FROM [ATTENDANCE] ; 

Nella query precedente, name è il column_name e [ATTENDANCE] è il nome_tabella.

Con questo è possibile utilizzare anche WHERE per creare condizioni di filtro.

-1

Se l'obiettivo è quello di selezionare la parte superiore 1 record di ogni PersonID, quindi utilizzare

select * from TableA group by personid 

Dal momento che si sta facendo un "gruppo da", tornerà ogni colonna, ma ignorerà (non visualizzare) eventuali righe aggiuntive con la stessa personaId

Problemi correlati