2010-01-19 8 views
1

J'ai une grande table (60 colonnes, 1,5 million d'enregistrements) de données dénormalisées dans MS SQL 2005 qui a été importée à partir d'une base de données Access. J'ai été chargé de normaliser et d'insérer ces données dans notre modèle de données.Colonnes groupées et non distinctes et normalisation des données

Je voudrais créer une requête qui a utilisé un regroupement de, par exemple "customer_number", et renvoyé un jeu de résultats qui contient uniquement les colonnes qui ne sont pas distinctes pour chaque client_number. Je ne sais pas si c'est même possible, mais ça serait d'une grande aide si c'était le cas.

Edit: si ma table a 3 colonnes (cust_num, cust_name_cust_address) et 5 enregistrements

|cust_num|cust_name|cust_address 
|01  |abc  |12 1st street 
|02  |cbs  |1 Aroundthe Way 
|01  |abc  |MLK BLVD 
|03  |DMC  |Hollis Queens 
|02  |cbs  |1 Aroundthe Way 

les résultats de ma requête souhaitée devrait être juste les données de cust_num et cust_name parce cust_address a des valeurs différentes pour ce groupe de cust_num. Un cust_num a beaucoup d'adresses mais seulement un cust_name.

Quelqu'un peut-il me diriger dans la bonne direction?

Jim

+0

Pourriez-vous s'il vous plaît envoyer des exemples de données et le jeu d'enregistrements résultant que vous souhaitez obtenir? – Quassnoi

Répondre

0

Non, cela ne peut pas être fait

2
WITH q AS 
     (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY col1, col2, col3, … ORDER BY id) AS rn 
     FROM mytable 
     ) 
SELECT * 
FROM q 
WHERE rn = 2 

Cela permet de sélectionner uniquement les lignes qui ont des doublons sur toutes les colonnes répertoriées dans la clause PARTITION BY (en fait, il choisira le premier doublon le cas échéant).

+0

c'est ce que j'ai demandé mais cela ne résout pas mon problème. Je vais modifier ma composition originale. Je voudrais regrouper ma table par numéro de client et récupérer toutes les colonnes en double pour le numéro de client groupé. Par exemple, si seul le nom du client était le même dans very_large_table, j'obtiendrais un set de retour avec seulement customer_number et customer_name, mais si customer_address était le même pour chaque client, je récupérerais les 3 colonnes. – jim