2009-12-16 18 views
20

Chcę wybrać różne wartości z tylko jedną kolumnę (the column BoekingPlaatsId) z tego zapytania:wybrać różne wartości od 1 kolumny

SELECT MAX(BoekingPlaatsId), BewonerId, Naam, VoorNaam 
FROM table 
GROUP BY BewonerId, Naam, VoorNaam 

Jak to zrobić w programie SQL Server?

+3

"Chcę wybrać różne wartości ** ** [...]". Niesamowite, jak blisko można znaleźć odpowiedź, nie wiedząc o tym :) –

Odpowiedz

18

DISTINCT powinno działać, jeśli chcesz tylko nazwy użytkowników:

SELECT DISTINCT BewonerId, Naam, Voornaam 
FROM TBL 

ale jeśli trzeba minimalne wartości identyfikatorów, grupy o nazwach ...

SELECT MIN(BoekingPlaatsId), MIN(BewonerId), Naam, Voornaam 
FROM TBL 
GROUP BY Naam, Voornaam 
+3

Grupowanie według wszystkiego jest dobre dla małego stołu, ale jest do dupy dla dużego stołu. Podzapytowanie –

0

właśnie przez te 2 grupy kolumny

Select Min(BoekingPlaatsId), Min(bewonerId), naam, voornaam 
    from table 
    group By naam, voornaam 
0
select Naam, Voornaam, min(BewonerId), min(BoekingPlaatsId) from tableName 
group by Naam, Voornaam 
0

myślę co szukasz jest coś takiego:

select distinct column1 from table1 where column2 = (select distinct column2 from table1) 
+0

nie jest skalarem –

7

Myślę, że powinieneś być w stanie korzystać z

SELECT DISTINCT BewonerId, Naam, VoorNaam 

Nie można dodać BoekingPlaatsId, ponieważ:

  • DISTINCT szuka unikatowych wierszy
  • Musisz określić, co BoekingPlaatsId wartość chcesz
    (W przypadku Jan Janssens, chcesz BoekingPlaatsId 1 lub 2?)

Co działa również to:

SELECT MAX(BoekingPlaatsId), BewonerId, Naam, VoorNaam 
FROM ... 
GROUP BY BewonerId, Naam, VoorNaam 
+0

Jup koleś! twoje drugie zapytanie działało jak czar! to jest mój pierwszy raz na tych forach, ale wy przekonaliście mnie dobrze! Będę tu znowu surfować! Myślę, że będę się dużo uczyć od was! Problem rozwiązany;) – Parm

3

nie robię tego tak dużo Nie jestem w 100% pewna składni, więc może być konieczne dostosowanie go nieco, ranking Google i partycji. Spróbuj tego ...

SELECT 
    *, 
    RANK() OVER(PARTITION BY Naam order by Naam) as Rank 
FROM 
    TABLE 
WHERE 
    Rank = 1 

To jest przesadą dla tabeli 4 kolumny, ale jeśli masz dość denormalised stół wiele kolumn, takie podejście jest nie do przecenienia dla select distinct 1 kolumny.

-2

Brzmi jak chcesz coś podobnego

select distinct(BewonerId), Naam, Voornaam from table_name 
+0

downvote dla niepoprawnej składni –

+0

Ten kod nadal będzie działał; to po prostu nie jest rozwiązanie. WYBIERZ WYRÓŻNIENIA a, b, c jest takie samo jak WYBIERZ WYRÓŻNIENIE (a), b, c. DISTINCT nie jest wywołaniem funkcji; to jest opcja zapytania. –

0

W ten sposób można wybrać z tabeli z tylko unikatowe wartości dla kolumny:

CREATE VIEW [yourSchema].[v_ViewOfYourTable] AS 
WITH DistinctBoekingPlaats AS 
(
    SELECT [BewonerId], 
      [Naam], 
      [VoorNaam], 
      [BoekingPlaatsId], 
      ROW_NUMBER() OVER(PARTITION BY [BoekingPlaatsId] ORDER BY DESC) AS 'RowNum' 
    FROM [yourSchema].[v_ViewOfYourTable] 
) 
SELECT * 
FROM DistinctProfileNames 
WHERE RowNum = 1 
--if you would like to apply group by you can do it in this bottom select clause but you don't need it to gather distinct values 

Nie trzeba do osiągnięcia przez grupę to.

0

Wpadłem na podobny problem i dla mnie rozwiązaniem było użycie klauzuli GROUP BY. W zasadzie zgrupowałem wszystkie blogi o tym samym tytule co jedna grupa.

składni:

SELECT post_title, post_link 
FROM blogs 
WHERE [ conditions ] 
GROUP BY post_title 
ORDER BY post_title; 

Może jesteś grupowanie wielu kolumn

Powiązane problemy