Comment returnner une ligne du groupe par plusieurs colonnes

J'essaie d'extraire une list de clients uniques à partir d'une database où certains clients sont répertoriés plus d'une fois. Les lignes (presque) dupliquées existent parce que les clients ont été déplacés d'une division à une autre ou parce que les clients ont été enregistrés avec une autre adresse (ou les deux).

Donc mon défi est dans datatables qui ressemblent à ceci:

ID Customer Division Address ----------------------------------- 1 AMX 1 ALX 2 BNY 2 BNZ 3 CPW 3 CTS 

Je veux que mon instruction select renvoie une ligne pour chaque client (je ne m'inquiète pas lequel).

 ID Customer Division Address ----------------------------------- 1 AMX 2 BNY 3 CPW 

J'utilise SQL Server 2008. Je pense que je dois faire un "GROUP BY" les deux dernières colonnes, mais je ne sais pas comment en get une seule ligne.

J'espère que quelqu'un peut m'aider!

(Oui, je sais que le problème devrait être résolu à la source mais malheureusement ce n'est pas possible dans un timeout raisonnable …).

 select ID, Customer,Division, Address from ( SELECT ID, Customer,Division, Address, ROW_NUMBER() OVER (PARTITON BY Customer Order by Id) as RN FROM T ) t1 WHERE RN=1 

Essaye celui-là –

 DECLARE @temp TABLE ( ID INT , Customer CHAR(1) , Division CHAR(1) , [Address] CHAR(1) ) INSERT INTO @temp (ID, Customer, Division, [Address]) VALUES (1, 'A', 'M', 'X'), (1, 'A', 'L', 'X'), (2, 'B', 'N', 'Y'), (2, 'B', 'N', 'Z'), (3, 'C', 'P', 'W'), (3, 'C', 'T', 'S') SELECT t.id , t.Customer , t.Division , t.[Address] FROM ( SELECT * , rn = ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY 1/0) FROM @temp ) t WHERE T.rn = 1 SELECT ID, Customer, Division = MAX(Division), [Address] = MAX([Address]) FROM @temp GROUP BY ID, Customer 

Sortie –

 id Customer Division Address ----------- -------- -------- ------- 1 AMX 2 BNY 3 CPW ID Customer Division Address ----------- -------- -------- ------- 1 AMX 2 BNZ 3 CTW