web-dev-qa-db-fra.com

Sélectionnez des valeurs distinctes dans 1 colonne

Je souhaite sélectionner des valeurs distinctes dans une seule colonne (la colonne BoekingPlaatsId) avec cette requête: 

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

Comment puis-je faire cela dans SQL Server?

21
Parm

DISTINCT devrait fonctionner si vous voulez juste les noms d'utilisateur:

SELECT DISTINCT BewonerId, Naam, Voornaam
FROM TBL

mais si vous avez besoin des valeurs minimales d'identification, regroupez-les par noms.

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

Je pense que vous devriez pouvoir utiliser

SELECT DISTINCT BewonerId, Naam, VoorNaam

Vous ne pouvez pas ajouter BoekingPlaatsId, car:

  • DISTINCT recherche des lignes uniques
  • Vous devez spécifier quelle valeur BoekingPlaatsId vous voulez
    .__ (Dans le cas de Jan Janssens, voulez-vous BoekingPlaatsId 1 ou 2?)

Ce qui fonctionne aussi est ceci:

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

Je ne fais pas beaucoup de cela, donc je ne suis pas sûr à 100% de la syntaxe, donc vous devrez peut-être légèrement modifier, google rank over et partitionner. Essaye ça...

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

C'est excessif pour une table à 4 colonnes, mais si vous avez une table assez dénormalisée avec beaucoup de colonnes, cette approche est précieuse pour une sélection distincte sur 1 colonne.

3
Paul Creasey

J'ai rencontré un problème similaire et la solution pour moi consistait à utiliser la clause GROUP BY ... .. Donc, en gros, j'ai regroupé tous les blogs portant le même titre en un groupe.

Syntaxe: 

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

Peut-être que vous regroupez plusieurs colonnes 

0
S.Joshi

juste grouper par ces 2 colonnes

  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

Je pense que ce que vous recherchez ressemble à ceci:

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

Voici comment vous pouvez sélectionner dans une table avec uniquement des valeurs uniques pour votre colonne:

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 

Vous n'avez pas besoin de groupe par pour accomplir cela. 

0
Thrillseeker419