2010-05-18 7 views
3

Je veux écrire une requête comme ceci:SQL Server Sélectionnez Distinct

Pour une table qui a ces colonnes: ColA ColB colC, ColD

d'abord sélectionner (IVC, ColB, colC, ColD) distincte (ColB, colC) de la table commande par ColD

la requête est censé commander la table par ColD, puis regrouper les résultats par la combinaison de ColB et colC (ils peuvent avoir différents types de données) et renvoie la premières lignes (avec toutes les colonnes de la table) dans les groupes .

Comment est-ce possible dans MS SQL Server 2005?

Répondre

6

Il semble que vous vouliez 'max par groupe'.

Une façon est d'utiliser la fonction de fenêtrage ROW_NUMBER numéroter les lignes dans chaque groupe, puis sélectionnez uniquement les lignes avec le numéro de la ligne 1:

SELECT ColA, ColB, ColC, ColD 
FROM 
(
    SELECT 
     ColA, ColB, ColC, ColD, 
     ROW_NUMBER(PARTITION BY ColB, ColC ORDER BY ColD) AS rn 
    FROM table1 
) T1 
WHERE rn = 1 
+0

+1 - Je tapais fondamentalement la même. Les fonctions de classement sont sous-estimées. ;-) – Lucero

+0

merci pour l'aide. que je suis bête! – homam