2010-02-11 7 views
2

Je suis bloqué sur un problème avec sql. J'ai une table avec de nombreuses entrées en double avec les noms de colonnes comme: -SQL Server sélectionnez distinct hell

eventnumber housenumber value1 value2 

Aucun de ces noms de colonnes sont la clé primaire comme il y a beaucoup de doublons. Ce que je voudrais faire est de sélectionner dans une autre table par housenumber distincte mais je semble obtenir toute la table copiée à travers, j'utilise: -

Select * into temp_table from schedule_temp where housenumber in (select distinct housenumerb from schedule_temp) 

Maintenant, je l'ai cassé un peu et si je fais: -

Select distinct housenumber into temp from schedule_temp group by housenumber 

Je reçois une table avec les uniques ... mais Numéro de maison alors comment pourrais-je utiliser ce tableau unique de conduire une autre sélection qui capte de température et Numéro de maison ne reçoit une instance du numéro de maison de schedule_temp? J'espère que cela a du sens.

Les bières sont sur moi si vous pouvez sauver ma santé mentale.

+0

Est-ce que * numéro_événement *, * valeur1 *, * valeur2 * est la même pour un * numéro de maison donné *? Si non, comment voulez-vous décider lequel mettre dans votre table de numéros de maison uniques * – bluecoder

+0

votre message me conduit également à la folie. Pouvez-vous reformuler pour être plus clair - en particulier pouvez-vous poster un échantillon de schéma réel et les données finales que vous voulez (pas tellement les demi-étapes)? – prodigitalson

+0

Ah désolé, les résultats devraient être montrés par numéro de maison unique. – jon

Répondre

0

D'abord, j'obtenir les données dans une table avec un identifiant d'incrémentation automatique

donc créer une table avec identifiant, EventNumber, housenumber, valeur1, valeur2 où id est un numéro d'auto.

Puis

Insert Into NewTemp(eventnumber,housenumber,value1, value2) 
Select eventnumber,housenumber,value1, value2 From schedule_temp 

Ensuite, cette requête devrait vous Guve 1 ligne par maison #

Select nt.* From NewTemp nt 
Join (select max(id) as id, housenumber from NewTemp Group By housenumber) t on t.id=nt.id 
+0

Merci beaucoup brendan qui me donne mes données triées par numéro de maison distincte qui est ce que je suis après, mais comment puis-je mettre le résultat dans une nouvelle table? – jon

+0

Sélectionnez * Dans SomeNewTable From Table1 – brendan

+0

Merci, j'aurais dû savoir que ... ça a été une longue journée :) – jon

1

Vous ne voulez pas d'enregistrements DISTINCTS (comme, chaque enregistrement a au moins une colonne différente de celle tous les autres enregistrements). Vous voulez un gagnant de chaque groupe (ou partition) d'enregistrements.

SELECT * 
FROM 
(
    SELECT 
    EventNumber, HouseNumber, Value1, Value2, 
    ROW_NUMBER() 
     OVER(PARTITION BY HouseNumber ORDER BY HouseNumber) as rowNum 
    FROM ServiceAddr 
) sub 
WHERE sub.rowNum = 1