2009-12-16 8 views
20

Je veux sélectionner des valeurs distinctes d'une seule colonne (la colonne BoekingPlaatsId) avec cette requête:Sélectionner des valeurs distinctes de 1 colonne

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

Comment puis-je faire dans SQL Server?

+3

"Je veux sélectionner des valeurs ** ** distinctes [...]". Impressionnant à quel point on peut être proche de la réponse sans le savoir :) –

Répondre

18

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 d'ID minimum, groupe par les noms ...

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

Regroupement par tout va bien pour une petite table mais ça craint pour une grande table. –

0

tout groupe par les 2 colonnes

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

Je pense que ce que vous cherchez quelque chose comme ceci:

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

la sous-requête n'est pas scalaire –

7

Je pense que vous devriez être en mesure d'utiliser

SELECT DISTINCT BewonerId, Naam, VoorNaam 

Vous ne pouvez pas ajouter BoekingPlaatsId, parce que:

  • DISTINCT cherche unique lignes
  • Vous devez spécifier ce BoekingPlaatsId valeur que vous voulez
    (En cas de Jan Janssens, voulez-vous BoekingPlaatsId 1 ou 2?)

Ce qui fonctionne aussi est la suivante:

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

Jup mec! votre deuxième requête a fonctionné comme un charme! C'est ma première fois sur ces forums mais vous m'avez bien convaincu! Je vais encore surfer ici! Je pense que je vais apprendre beaucoup de vous les gars! Problème résolu;) – Parm

3

Je ne fais pas beaucoup de cette façon Je ne suis pas sûr à 100% de la syntaxe, donc vous devrez peut-être le modifier légèrement, google classement et la partition. Essayez ceci ...

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

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

-2

On dirait que vous voulez quelque chose comme

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

downvote pour syntaxe incorrecte –

+0

Ce code sera toujours exécuté; ce n'est juste pas une solution. SELECT DISTINCT a, b, c est identique à SELECT DISTINCT (a), b, c. DISTINCT n'est pas un appel de fonction; C'est une option de requête. –

0

Voici comment vous pouvez choisir une table avec seulement 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 pour accomplir par groupe ce.

0

J'ai rencontré un problème similaire et pour moi la solution utilisait la clause GROUP BY. Donc, fondamentalement, j'ai regroupé tous les blogs avec le même titre qu'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

Questions connexes