it-swarm.com.de

Wählen Sie aus einer Spalte unterschiedliche Werte aus

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

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

Wie mache ich das in SQL Server?

21
Parm

DISTINCT sollte funktionieren, wenn Sie nur die Benutzernamen wünschen:

SELECT DISTINCT BewonerId, Naam, Voornaam
FROM TBL

wenn Sie jedoch die Mindest-ID-Werte benötigen, gruppieren Sie die Namen ...

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

Ich denke, du solltest verwenden können

SELECT DISTINCT BewonerId, Naam, VoorNaam

Sie können keine BoekingPlaatsId hinzufügen, weil:

  • DISTINCT sucht nach eindeutigen Zeilen
  • Sie müssen den gewünschten BoekingPlaatsId-Wert angeben
    (Möchten Sie BoekingPlaatsId 1 oder 2?

Was auch funktioniert, ist folgendes:

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

Ich mache nicht viel davon, also bin ich nicht zu 100% sicher von der Syntax, also müssen Sie es vielleicht etwas anpassen, google rank over und partitionieren. Versuche 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. Wenn Sie jedoch eine relativ denormalisierte Tabelle mit einer Vielzahl von Spalten haben, ist dieser Ansatz von unschätzbarem Wert, wenn Sie für eine Spalte eine Auswahl treffen.

3
Paul Creasey

Ich bin auf ein ähnliches Problem gestoßen und für mich war die Lösung die GROUP BY - Klausel ..__ Im Grunde habe ich alle Blogs mit demselben Titel zu einer Gruppe zusammengefasst.

Syntax: 

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

Vielleicht gruppieren Sie mehrere Spalten 

0
S.Joshi

gruppieren Sie einfach nach diesen 2 Spalten

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

Ich denke, was Sie suchen, ist ungefähr so:

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

So können Sie aus einer Tabelle mit nur eindeutigen Werten für Ihre Spalte auswählen:

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 

Sie brauchen keine Gruppe, um dies zu erreichen. 

0
Thrillseeker419