2012-03-29 4 views
0

enter image description hereSQL Server SSIS source OLEDB à destination?

OLEDB source Table

Name,Age,Seq 
Gauraw,30,1 
Gauraw,31,1 
Kiran,28,3 
Kiran,29,3 
kiran,28,3 
Venkatesh,,4 
Venkatesh,28,4 

Je veux tableau OLEDB destination comme

Gauraw,31,1 
kiran,28,3 
Venkatesh,28,4 

fondamentalement, je suis en train de créer table de sauvegarde oledb_source-oledb_destination et mon état est si seq colonne est répétée I vouloir la dernière rangée avec cette colonne seq comme ci-dessus Table Kiran,28,3 est la dernière entrée avec seq ayant une valeur 3.

Comment puis-je obtenir ce résultat dans les données SSIS tâche de flux oledb source-oledb destination.

+0

Avez-vous d'autres colonnes à utiliser (un ID ou un horodatage)? Vous pouvez obtenir le dernier enregistrement de votre séquence en utilisant la fonction de la fenêtre ROW_NUMBER, mais vous devez ORDER le jeu de résultats. Sans un identifiant ou un horodatage, vous n'obtiendrez pas les résultats que vous voulez ... – jlnorsworthy

+0

Non, je n'ai pas une telle colonne. –

+0

Pouvez-vous en ajouter un? Une colonne d'identité ou un paramètre DateTime défini sur GETDATE() lors de l'insertion fonctionnera correctement. Votre exigence semble indiquer que vous pouvez ajouter plusieurs enregistrements identiques à votre table, mais à un moment donné, vous ne souhaitez conserver que l'enregistrement ajouté le plus récent (à partir de chaque séquence). Si vous n'avez pas de colonne pour identifier le dernier enregistrement ajouté, vous comptez sur l'ordre des enregistrements de votre table (heap?), Ce qui n'est absolument pas recommandé. – jlnorsworthy

Répondre

1

Sélectionnez OLE DB Source

Changer le mode d'accès aux données à "commande SQL" puis collez la requête ci-dessous

with x as (select *,rn=row_number() over (order by name) 
      from source) 

select a.* 
from x a , 
     (select name , max(rn) rn 
     from x 
     group by name) b 
where a.rn = b.rn 

Maintenant, vous pouvez déplacer votre colonne requise

0

Depuis SSIS insérer des données par lots , vous ne pouvez pas décider ce qui va se passer avec une ligne basée sur ce qui s'est passé avec les précédentes, donc ma suggestion ici est de traiter avec votre requête source. Je ne connais pas votre logique, mais on dirait que vous voulez regrouper par nom et obtenir l'âge et la séquence max. Comme l'âge et la séquence ne diminuent jamais, vous pouvez utiliser une fonction MAX:

select Name, max(age) as age, max(seq) as seq 
from your_table 
group by Name 
Questions connexes