none
SSIS-Spalte in Zeile RRS feed

  • Frage

  • Hallo liebe Community,

    ich möchte in SSIS den Inhalt einer Spalte in eine Zeile aufbereiten. ACHTUNG nur z.B. die ersten 10 Werte sollen in die Zeile übertragen werden.

    Nur die ersten 10 Werte einer Spalte in eine Zeile aufbereiten.



    • Bearbeitet 30colours Montag, 2. September 2013 11:47
    Freitag, 30. August 2013 06:52

Antworten

  • Rein mit T-SQL könntest Du es so auf die "alte Art" so lösen (nur beispielhaft, nicht vollständig):

    DECLARE @tbl AS Table (v_id int, i_ID int, m_id int);
    
    INSERT INTO @tbl VALUES (744715, 555222, 200);
    INSERT INTO @tbl VALUES (744715, 988884, 500);
    INSERT INTO @tbl VALUES (744715, 121458,   0);
    INSERT INTO @tbl VALUES (744715, 659875, 120);
    INSERT INTO @tbl VALUES (744715, 789556, 300);
    INSERT INTO @tbl VALUES (746045, 555455, 222);
    INSERT INTO @tbl VALUES (746045, 555455, 333);
    INSERT INTO @tbl VALUES (746045, 555455, 444);
    INSERT INTO @tbl VALUES (746045, 555455, 555);
    
    
    ;WITH cte AS
        (SELECT *, ROW_NUMBER() OVER (PARTITION BY v_id ORDER BY i_ID) AS RowNum
         FROM @tbl)
    SELECT v_id
          ,MAX(CASE WHEN RowNum = 1 THEN m_id END) AS m_ID1
          ,MAX(CASE WHEN RowNum = 2 THEN m_id END) AS m_ID2
          ,MAX(CASE WHEN RowNum = 3 THEN m_id END) AS m_ID3
          ,MAX(CASE WHEN RowNum = 4 THEN m_id END) AS m_ID4
          ,MAX(CASE WHEN RowNum = 5 THEN m_id END) AS m_ID5
    FROM cte
    WHERE cte.RowNum <= 10
    GROUP BY v_id;

    Ab SQL Server gibt es auch den PIVOT Operator, siehe Verwenden von PIVOT und UNPIVOT

    Und in SSIS gibt es die Transformation für Pivot, mit der Du das gleiche erzielen könntest.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert 30colours Mittwoch, 4. September 2013 07:39
    Montag, 2. September 2013 12:23

Alle Antworten

  • Hi,

    vorab zwei Fragen: Ist es wichtig, dass die Reihenfolge der Zeilen bei der Transformation in die Spalten beibehalten wird?

    Muss also bspw. der Wert "200" der ersten Zeile als m_ID1, "500" als m_ID2, ... ausgegeben werden?

    Falls ja, wo ist die Spalte, nach der man sortieren kann? Denn falls man die Daten einfach so ohne ORDER BY ausliest, ist nicht gesichert, dass die Daten auch wirklich so kommen, wie Sie da stehen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 30. August 2013 07:52
    Moderator
  • Hi,

    es ist wichtig dass die Reihenfolge so beibehalten wird.

    Ich habe eine neue Spalte hinzugefügt. Diese kann man aufsteigend sortieren.

     



    • Bearbeitet 30colours Sonntag, 1. September 2013 20:43
    Sonntag, 1. September 2013 19:41
  • weiß wirklich keiner wie es geht?
    • Bearbeitet 30colours Montag, 2. September 2013 11:46
    Montag, 2. September 2013 11:45
  • Rein mit T-SQL könntest Du es so auf die "alte Art" so lösen (nur beispielhaft, nicht vollständig):

    DECLARE @tbl AS Table (v_id int, i_ID int, m_id int);
    
    INSERT INTO @tbl VALUES (744715, 555222, 200);
    INSERT INTO @tbl VALUES (744715, 988884, 500);
    INSERT INTO @tbl VALUES (744715, 121458,   0);
    INSERT INTO @tbl VALUES (744715, 659875, 120);
    INSERT INTO @tbl VALUES (744715, 789556, 300);
    INSERT INTO @tbl VALUES (746045, 555455, 222);
    INSERT INTO @tbl VALUES (746045, 555455, 333);
    INSERT INTO @tbl VALUES (746045, 555455, 444);
    INSERT INTO @tbl VALUES (746045, 555455, 555);
    
    
    ;WITH cte AS
        (SELECT *, ROW_NUMBER() OVER (PARTITION BY v_id ORDER BY i_ID) AS RowNum
         FROM @tbl)
    SELECT v_id
          ,MAX(CASE WHEN RowNum = 1 THEN m_id END) AS m_ID1
          ,MAX(CASE WHEN RowNum = 2 THEN m_id END) AS m_ID2
          ,MAX(CASE WHEN RowNum = 3 THEN m_id END) AS m_ID3
          ,MAX(CASE WHEN RowNum = 4 THEN m_id END) AS m_ID4
          ,MAX(CASE WHEN RowNum = 5 THEN m_id END) AS m_ID5
    FROM cte
    WHERE cte.RowNum <= 10
    GROUP BY v_id;

    Ab SQL Server gibt es auch den PIVOT Operator, siehe Verwenden von PIVOT und UNPIVOT

    Und in SSIS gibt es die Transformation für Pivot, mit der Du das gleiche erzielen könntest.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert 30colours Mittwoch, 4. September 2013 07:39
    Montag, 2. September 2013 12:23