2013-03-18 17 views
8

chcę używać wyraźną & górę w tym samym czasie, zrobiłemKorzystanie odrębne i TOP jednocześnie

SELECT distinct TOP 10 * FROM TableA

ale nadal mam duplikat PersonID tak myślałam zrobić:

SELECT distinct (personID) TOP 10 * FROM TableA ale składnia jest źle, więc zastanawiam się, czy istnieje rozwiązanie

dzięki,

+0

Co zrobisz, jeśli chcesz wybrać tylko jeden "ID osoby", jeśli masz zduplikowane wiersze? –

Odpowiedz

22

Używasz SELECT *, który pobiera wszystkie rekordy. Jeśli chcesz użyć prawdziwego DISTINCT, wylistuj kolumnę, która ma otrzymać różne wartości. Jeśli masz wiele kolumn, wszystkie połączone kolumny tworzą jeden odrębny rekord.

SELECT distinct TOP 10 personID 
FROM TableA 

Należy pamiętać, że bez ORDER BY będzie to powrót pierwsze 10 rekordów w przypadkowej kolejności. Wyniki mogą się różnić przy każdym uruchomieniu zapytania.

-1

Naprawiłem to zrobiłem

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

Bez zamówienia według wyników może się różnić. Nawet tabela z PK nie gwarantuje zwrotu tego samego zamówienia bez zamówienia. – Paparazzi

+0

Jeśli masz taką samą osobę w swoich 10 najlepszych wynikach, to nie zadziała, dostaniesz tylko 9 wyników. Jest to tak proste, jak 'WYBIERZ IDENTYFIKOWANY TOP 10 ID osoby z TableA' –

0

Wydaje się, chcą 10 losowych rekordów dla różnych osób. Spróbuj tego:

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

Ogólnie jednak, przy użyciu top należy również za pomocą order by aby określić, co masz na myśli przez „górę”.

1

zaznaczyć wyraźną PersonID z próbki TABLEA 10

Działa to w Teradata

0

To działa tylko jeśli używasz zapytanie tak:

SELECT DISTINCT TOP 2 name FROM [ATTENDANCE] ; 

W powyższym zapytaniu name jest column_name i [ATTENDANCE] to nazwa_tabeli.

Możesz także użyć WHERE, aby stworzyć warunki filtrowania.

-1

Jeśli celem jest, aby wybrać top 1 rekord każdego PersonID, a następnie użyć

select * from TableA group by personid 

Ponieważ robisz „grupy przez” powróci każdą kolumnę, ale zignoruje (nie wyświetlany) wszelkie dodatkowe wiersze z tą samą osobąID

Powiązane problemy