28 Stimmen

Unterschiedliche Werte aus 1 Spalte auswählen

Ich möchte mit dieser Abfrage eindeutige Werte aus nur einer Spalte (der Spalte BoekingPlaatsId) auswählen:

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

Wie kann ich das in SQL Server tun?

8 Stimmen

"Ich möchte auswählen deutlich Werte [...]". Erstaunlich, wie nah man der Antwort sein kann, ohne sie zu kennen :)

23voto

doza Punkte 1491

DISTINCT sollte funktionieren, wenn Sie nur die Benutzernamen benötigen:

SELECT DISTINCT BewonerId, Naam, Voornaam
FROM TBL

aber wenn Sie die Mindest-ID-Werte benötigen, gruppieren Sie nach den Namen...

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

4 Stimmen

Die Gruppierung nach allem ist für eine kleine Tabelle in Ordnung, aber für eine große Tabelle ist sie schlecht.

9voto

Sander Rijken Punkte 21069

Ich denke, Sie sollten in der Lage sein, Folgendes zu verwenden

SELECT DISTINCT BewonerId, Naam, VoorNaam

Sie können nicht hinzufügen BoekingPlaatsId , denn:

  • DISTINCT sucht nach einzigartigen Zeilen
  • Sie müssen angeben, was BoekingPlaatsId gewünschter Wert
    (Im Falle von Jan Janssens, wollen Sie BoekingPlaatsId 1 oder 2?)

Was auch funktioniert, ist dies:

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

0 Stimmen

Jup dude! Ihre zweite Abfrage funktionierte wie ein Charme! Dies ist mein erstes Mal auf diesen Foren, aber ihr Jungs überzeugte mich gut! Ich werde hier wieder herum surfen! Ich denke, ich werde eine Menge von euch lernen können! Problem gelöst ;)

6voto

Paul Creasey Punkte 27679

Ich tue nicht viel von diesem so bin ich nicht 100% sicher der Syntax, so dass Sie möglicherweise zu zwicken es leicht, Google Rang über und Partition. Versuchen Sie dies...

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

Dies ist ein Overkill für eine 4-Spalten-Tabelle, aber wenn Sie eine ziemlich denormalisierte Tabelle mit vielen Spalten haben, ist dieser Ansatz von unschätzbarem Wert für select distinct auf 1 Spalte.

0voto

Charles Bretana Punkte 137391

Einfach nach diesen 2 Spalten gruppieren

  Select Min(BoekingPlaatsId), Min(bewonerId), naam, voornaam
  from table
  group By naam, voornaam

0voto

BlackTigerX Punkte 5824
select Naam, Voornaam, min(BewonerId), min(BoekingPlaatsId) from tableName
group by Naam, Voornaam

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X