2016-05-03 5 views
-1

Ich habe in SSIS drei Spalten aus einer Datenbank.SSIS - Gruppieren von und max der String-Spalte

Preis Anzahl Titel

ich mit "Preis" zu GROUP BY will und "Nummer". Das Problem ist, dass es Zeilen mit der gleichen Nummer aber unterschiedlichen Titel gibt. Also möchte ich den MAXIMUM des Titels haben.

In anderen ETL-Tools wie Pentaho oder OWB funktioniert es. Es gibt Funktionen, bei denen ich GROUP BY nach Preis und Anzahl gruppieren kann und den MAXIMUM des Titels erhalten kann.

Gibt es eine Problemumgehung?

+0

Könnte in der Lage sein, einen [Hack wie diesen hier] zu verwenden (http://stackoverflow.com/a/8082874/181965) – billinkc

Antwort

1

Haben Sie sich die Transformation Aggregate angesehen?

Alternativ können Sie diese Operation in Quell-SQL ausführen, mit dem Vorteil, dass die Datenbank-Engine sie verarbeitet (die SSIS-Aggregat-Umwandlung blockiert, sodass alle Zeilen in den Speicher geladen werden, bevor die Ergebnisse ausgegeben werden).

AKTUALISIERT: Wenn in rohen SQL Pre-Aggregation (bevor es in SSIS bekommt) ist keine Option, können Sie einen Ersatzschlüssel für den Titel hinzufügen könnte:

SELECT 
Price,Number,Title,ROW_NUMBER() OVER 
(PARTITION BY Price,Number ORDER BY Title) AS TitleOrdinal 
FROM ... 

Dann SSIS Aggregat Verwenden Sie MAX (TitleOrdinal) (eine numerische Spalte) als Ersatz für MAX (Titel).

Um den tatsächlichen MAX (Titel) zu erhalten, müssten Sie den ursprünglichen Datensatz diesem aggregierten Satz bei Price = Price, Number = Number, TitleOrdinal = [MAX (TitleOrdinal) aus aggregiertem Set] beifügen.

Verwandte Themen