2014-10-02 5 views
5

ich die folgende Abfrage erhalten haben:SQL Pivot mit dynamisch generierte Spalten, Aggregatfunktion und Spalten ohne Aggregation

WITH preEKBE AS(
SELECT 
     EKPO . MANDT, 
     EKPO . EBELN, 
     EKPO . EBELP, 
     DD07T.DDTEXT AS c_Meaning, 
     EKBE . VGABE, 
     EKBE . DMBTR, 
     EKBE . MENGE, 
     COUNT(VGABE) OVER(PARTITION BY EKBE . EBELN, EKBE . EBELP, ZEKKN) AS c_COUNT, 
     CONVERT (varchar(10),MIN(EKBE . BLDAT) OVER (PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EBKE_BLDAT_First, 
     CONVERT (varchar(10),MIN(EKBE . BUDAT) OVER (PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EKBE_BUDAT_First, 
     CONVERT (varchar(10),MAX(EKBE . BLDAT) OVER (PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EBKE_BLDAT_Last, 
     CONVERT (varchar(10),MAX(EKBE . BUDAT) OVER (PARTITION BY EKBE . EBELN, EKBE . EBELP, EKBE . VGABE),104) AS c_EKBE_BUDAT_Last 
     FROM EKPO 

LEFT JOIN EKKO 
     ON EKPO . MANDT = EKKO . MANDT 
     AND EKPO . EBELN = EKKO . EBELN 

LEFT JOIN EKBE 
     ON EKPO . MANDT = EKBE . MANDT 
     AND EKPO . EBELN = EKBE . EBELN 
     AND EKPO . EBELP = EKBE . EBELP 

LEFT JOIN DD07T 
     ON DD07T . DOMNAME = 'VGABE' 
     AND DD07T . DOMVALUE_L = EKBE.VGABE 
     AND DD07T . DDLANGUAGE = 'D' 
) 

SELECT * INTO #preEKBE FROM preEKBE 
ORDER BY EBELN , EBELP 

Es erzeugt mir diese Tabelle

+-------+------------+-------+-----------------------------+-------+---------+----------+---------+--------------------+--------------------+-------------------+-------------------+ 
| MANDT | EBELN | EBELP |   c_Meaning   | VGABE | DMBTR | MENGE | c_COUNT | c_EBKE_BLDAT_First | c_EKBE_BUDAT_First | c_EBKE_BLDAT_Last | c_EKBE_BUDAT_Last | 
+-------+------------+-------+-----------------------------+-------+---------+----------+---------+--------------------+--------------------+-------------------+-------------------+ 
| 800 | 3000000004 | 00001 | Wareneingang    |  1 | 27.95 | 1.000 |  1 | 19.12.2000   | 19.12.2000   | 19.12.2000  | 19.12.2000  | 
| 800 | 3000000004 | 00001 | Rechnungseingang   |  2 | 27.95 | 1.000 |  1 | 19.12.2000   | 21.12.2000   | 19.12.2000  | 21.12.2000  | 
| 800 | 3000000004 | 00002 | Wareneingang    |  1 | 10.95 | 1.000 |  1 | 19.12.2000   | 19.12.2000   | 19.12.2000  | 19.12.2000  | 
| 800 | 3000000004 | 00002 | Rechnungseingang   |  2 | 10.95 | 1.000 |  1 | 19.12.2000   | 21.12.2000   | 19.12.2000  | 21.12.2000  | 
| 800 | 4500008499 | 00010 | Wareneingang    |  1 | 268.43 | 1.000 |  1 | 27.03.2000   | 27.03.2000   | 27.03.2000  | 27.03.2000  | 
| 800 | 4500008499 | 00010 | Leistungserfassungsblatt |  9 | 268.43 | 1.000 |  1 | 27.03.2000   | 27.03.2000   | 27.03.2000  | 27.03.2000  | 
| 800 | 4500010470 | 00010 | Wareneingang    |  1 | 0.00 | 1092.000 |  6 | 07.02.2001   | 07.02.2001   | 07.02.2001  | 07.02.2001  | 
| 800 | 4500010470 | 00010 | Wareneingang    |  1 | 0.00 | 3512.000 |  6 | 07.02.2001   | 07.02.2001   | 07.02.2001  | 07.02.2001  | 
| 800 | 4500010470 | 00010 | Warenausgabe für Umlagerung |  6 | 1615.52 | 3512.000 |  6 | 07.02.2001   | 07.02.2001   | 07.02.2001  | 07.02.2001  | 
| 800 | 4500010470 | 00010 | Warenausgabe für Umlagerung |  6 | 502.32 | 1092.000 |  6 | 07.02.2001   | 07.02.2001   | 07.02.2001  | 07.02.2001  | 
| 800 | 4500010470 | 00010 | Lieferung zu Umlagerung  |  8 | 0.00 | 1092.000 |  6 | 01.01.1900   | 07.02.2001   | 01.01.1900  | 07.02.2001  | 
| 800 | 4500010470 | 00010 | Lieferung zu Umlagerung  |  8 | 0.00 | 3512.000 |  6 | 01.01.1900   | 07.02.2001   | 01.01.1900  | 07.02.2001  | 
+-------+------------+-------+-----------------------------+-------+---------+----------+---------+--------------------+--------------------+-------------------+-------------------+ 

Jetzt habe ich eine dynamische Pivot bekam das funktioniert teilweise.

DECLARE @cols AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + QUOTENAME(col + '_' + VGABE) 
        from #preEKBE t 
        cross apply 
        (     
         select 'c_DMBTR', 1 union all 
         select 'c_MENGE', 2 union all 
         select 'c_COUNT', 3  
        ) c (col, so) 
        group by col, so, VGABE 
        order by VGABE, so 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query 
    = 'SELECT EBELN, EBELP,' + @cols + N' 
    from 
    (
     select 
     t.EBELN, 
     t.EBELP, 
     new_col = c.orig_col + ''_'' + VGABE, 
     c.value 
     from #preEKBE t 

     cross apply 
     (
     select ''c_MENGE'', t.MENGE union all 
     select ''c_DMBTR'', t.DMBTR union all 
     select ''c_COUNT'', t.c_COUNT 
    ) c (orig_col, value) 
    ) x 
    pivot 
    (
     sum(value) 
     for new_col in (' + @cols + N') 
    ) p 
    order by EBELN , EBELP' 
exec sp_executesql @query; 

mir ein Ergebnis geben:

+------------+-------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| EBELN | EBELP | c_DMBTR_1 | c_MENGE_1 | c_COUNT_1 | c_DMBTR_2 | c_MENGE_2 | c_COUNT_2 | c_DMBTR_6 | c_MENGE_6 | c_COUNT_6 | c_DMBTR_7 | c_MENGE_7 | c_COUNT_7 | c_DMBTR_8 | c_MENGE_8 | c_COUNT_8 | c_DMBTR_9 | c_MENGE_9 | c_COUNT_9 | c_DMBTR_P | c_MENGE_P | c_COUNT_P | c_DMBTR_R | c_MENGE_R | c_COUNT_R | 
+------------+-------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| 3000000004 | 00001 | 27.950 | 1.000  | 1.000  | 27.950 | 1.000  | 1.000  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | 
| 3000000004 | 00002 | 10.950 | 1.000  | 1.000  | 10.950 | 1.000  | 1.000  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | NULL  | 
+------------+-------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ 

Ich brauche die Abfrage dynamisch zu sein, weil der Spalte VGABE die neuen Spaltennamen zu erstellen und es können Werte sein, die nicht verwendet werden, und ich nur möchte, dass die VGABE Werte verwendet werden.

Jetzt ist das Problem, dass ich mehr Spalten hinzufügen möchte, die auch dynamisch generiert werden sollten. Wenn es eine VGABE mit 1 gibt, brauche ich eine Spalte namens c_Meaning_1 (nvarchar) und es wird den Wert von der Verknüpfung mit DD07T haben.

Die c_COUNT_ steht für die Anzahl der einzelnen VGABE Wert pro Datensatz. Diese Spalte funktioniert einwandfrei.

Nach diesen Spalten Ich muß auch die Spalten hinzufügen c_BLDAT_First_, c_BUDAT_First_, c_BLDAT_Last_ und c_BUDAT_Last_ mit dem Wert von VGABE am Ende der neuen Spaltennamen verkettet. Dieser Wert wird im CTE berechnet.

Gibt es eine Möglichkeit, das CTE direkt ohne temporäre Tabelle zu verwenden?

Ich bin mir nicht sicher, wie ich das lösen soll, da ich mit mehreren Datentypen hantiere und sie alle unterschiedlich aggregiert wären. Wenn die Werte 1 und 9 für VGABE sind dann soll es so aussehen:

+---------------+-----------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+---------------------------+------------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+ 
| C_MEANING_1 | C_DMBTR_1 | C_MENGE_1 | C_COUNT_1 | C_EBKE_BLDAT_FIRST_1 | C_EKBE_BUDAT_FIRST_1 | C_EBKE_BLDAT_LAST_1 | C_EKBE_BUDAT_LAST_1 |  C_MEANING_9  | C_DMBTR_9 | C_MENGE_9 | C_COUNT_9 | C_EBKE_BLDAT_FIRST_9 | C_EKBE_BUDAT_FIRST_9 | C_EBKE_BLDAT_LAST_9 | C_EKBE_BUDAT_LAST_9 | 
+---------------+-----------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+---------------------------+------------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+ 
| Wareneingang: | 10,00  |   1 |   1 | 19.12.2000   | 19.12.2000   | 19.12.2000   | 19.12.2000   | Leistungserfassungsblatt: |   0 |   0 |   0 | NULL     | NULL     | NULL    | NULL    | 
| Wareneingang: | 0   |   0 |   0 | NULL     | NULL     | NULL    | NULL    | Leistungserfassungsblatt: |   20 |   2 |   1 | 19.12.2000   | 19.12.2000   | 19.12.2000   | 19.12.2000   | 
+---------------+-----------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+---------------------------+------------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+ 

Für jeden VGABE Wert sollte es eine eigene Spalte in der oben angegebenen Reihenfolge sein. Wenn Sie weitere Informationen benötigen, fragen Sie mich bitte. Ich verwende SQL Server 2014 mit SQL Management Studio 2014 und TSQL.

+0

Vielleicht bin ich nicht ganz die Frage verstehen, aber wenn Sie wollen nur Zeilen zurück, die mit 'VGABE = 1 ', dann sollten Sie in der Lage sein, ein' WHERE' hinzufügen Filter auf die dynamische Spaltengenerierung. Dann würden Sie auch die anderen gewünschten Spalten ('c_EBKE_BLDAT_First',' c_EKBE_BUDAT_First', usw.) in Ihre Unterabfrage des Pivots und die endgültige Auswahlliste einbeziehen, die dieser [demo] ähnelt (http://sqlfiddle.com/#). ! 3/58e57/7). Wenn Sie das nicht möchten, müssen Sie die Frage möglicherweise aktualisieren, um sie klarer zu machen. – Taryn

+0

Die Abfrage sollte die Spalten für jeden Wert in VGABE erstellen. Wenn also die Werte (1,3,7, R) in VGABE vorhanden sind, dann sollten die Spalten beginnend mit dem niedrigsten Wert erstellt werden. C_Meaning_X c_DMBTR_X c_MENGE_X c_COUNT_X c_BLDAT_First_X c_BUDAT_First_X c_BLDAT_Last_X c_BUDAT_Last_X (wobei X für den Wert in VGABE steht). Die Spalten müssen in dieser Reihenfolge sein. – JollyPopper

+0

Die knifflige Sache hier zu tun ist, dass der Inhalt in c_Meaning_X von dem Wert in VGABE abhängt und in der Tabelle DD07T (Join) ist. Wenn es zum Beispiel VGABE 9 gibt, dann muss für jeden Datensatz die Spalte c_Meaning_9 mit Inhalt "Leistungserfassungsblatt" aus DD07T.DDTEXT angelegt werden, ob es nur einen Datensatz mit vgabe 9 gibt und in den anderen nicht. – JollyPopper

Antwort

7

Nun, Sie haben ein bisschen Chaos hier, weil Sie mehrere Spalten mit mehreren Zeilen in mehrere Spalten konvertieren möchten und obendrein müssen Sie ein anderes Aggregat für jedes verwenden, weil einige von ihnen Sie benötigen zu SUM und andere müssen Sie MAX oder MIN (auf der Zeichenfolge/Daten) verwenden.

Anstatt direkt in eine dynamische sql-Version zu tauchen, sollten Sie versuchen, immer zu versuchen, die Logik korrekt mit einer kleineren Version einer statischen Abfrage zu erhalten. Dies erleichtert meiner Meinung nach das Arbeiten mit dynamischem SQL, weil Sie nicht raten, was zu tun ist oder was nicht richtig funktioniert.

Ich würde zuerst mit einer Abfrage beginnen, die die Summe jedes Elements, das Sie benötigen, zu SUMME.

select ebeln, ebelp, 
    c_Meaning, 
    vgabe, 
    dmbtr = cast(sum(dmbtr) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
    menge = cast(sum(menge) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
    c_count = cast(sum(c_count) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
    c_EBKE_BLDAT_First = cast(c_EBKE_BLDAT_First as varchar(50)), 
    c_EKBE_BUDAT_First = cast(c_EKBE_BUDAT_First as varchar(50)), 
    c_EBKE_BLDAT_Last = cast(c_EBKE_BLDAT_Last as varchar(50)), 
    c_EKBE_BUDAT_Last = cast(c_EKBE_BUDAT_Last as varchar(50)) 
from preEKBE 

Siehe SQL Fiddle with Demo.Dies erhält die Werte von allem, was Sie im Endergebnis benötigen, weil Sie die Summe über die Kombination ebeln, ebelp und vgabe erhalten. Sie werden sehen, dass ich auch alle Werte in denselben Datentyp umwandle - dies ist für den nächsten Schritt erforderlich - das Unpivot. Da alle Daten in derselben Spalte gespeichert werden, benötigen sie die gleichen Datentypen.

select d.ebeln, d.ebelp, 
    new_col = c.orig_col + '_' + cast(d.vgabe as varchar(2)), 
    c.value 
from 
(
    select ebeln, ebelp, 
    c_Meaning, 
    vgabe, 
    dmbtr = cast(sum(dmbtr) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
    menge = cast(sum(menge) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
    c_count = cast(sum(c_count) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
    c_EBKE_BLDAT_First = cast(c_EBKE_BLDAT_First as varchar(50)), 
    c_EKBE_BUDAT_First = cast(c_EKBE_BUDAT_First as varchar(50)), 
    c_EBKE_BLDAT_Last = cast(c_EBKE_BLDAT_Last as varchar(50)), 
    c_EKBE_BUDAT_Last = cast(c_EKBE_BUDAT_Last as varchar(50)) 
    from preEKBE 
) d 
cross apply 
(
    select 'c_Meaning', c_Meaning union all 
    select 'c_MENGE', menge union all 
    select 'c_DMBTR', dmbtr union all 
    select 'c_count', c_count union all 
    select 'c_EBKE_BLDAT_First', c_EBKE_BLDAT_First union all 
    select 'c_EKBE_BUDAT_First', c_EKBE_BUDAT_First union all 
    select 'c_EBKE_BLDAT_Last', c_EBKE_BLDAT_Last union all 
    select 'c_EKBE_BUDAT_Last', c_EKBE_BUDAT_Last 
) c (orig_col, value) 

Siehe SQL Fiddle with Demo. Jetzt hast du Daten, die wie folgt aussieht:

|  EBELN | EBELP |    NEW_COL |      VALUE | 
|------------|-------|----------------------|-----------------------------| 
| 3000000004 |  1 |   c_Meaning_1 |    Wareneingang | 
| 3000000004 |  1 |   c_MENGE_1 |       1 | 
| 3000000004 |  1 |   c_DMBTR_1 |      27.95 | 
| 3000000004 |  1 |   c_count_1 |       1 | 
| 3000000004 |  1 | c_EBKE_BLDAT_First_1 |     19.12.2000 | 
| 3000000004 |  1 | c_EKBE_BUDAT_First_1 |     19.12.2000 | 

Schließlich würden Sie die Pivot-Funktion anwenden:

select ebeln, 
    ebelp, 
    c_Meaning_1, c_MENGE_1, c_DMBTR_1, c_count_1, 
    c_EBKE_BLDAT_First_1, c_EKBE_BUDAT_First_1, 
    c_EBKE_BLDAT_Last_1, c_EKBE_BUDAT_Last_1 
from 
(
    select d.ebeln, d.ebelp, 
    new_col = c.orig_col + '_' + cast(d.vgabe as varchar(2)), 
    c.value 
    from 
    (
    select ebeln, ebelp, 
     c_Meaning, 
     vgabe, 
     dmbtr = cast(sum(dmbtr) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
     menge = cast(sum(menge) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
     c_count = cast(sum(c_count) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
     c_EBKE_BLDAT_First = cast(c_EBKE_BLDAT_First as varchar(50)), 
     c_EKBE_BUDAT_First = cast(c_EKBE_BUDAT_First as varchar(50)), 
     c_EBKE_BLDAT_Last = cast(c_EBKE_BLDAT_Last as varchar(50)), 
     c_EKBE_BUDAT_Last = cast(c_EKBE_BUDAT_Last as varchar(50)) 
    from preEKBE 
) d 
    cross apply 
    (
    select 'c_Meaning', c_Meaning union all 
    select 'c_MENGE', menge union all 
    select 'c_DMBTR', dmbtr union all 
    select 'c_count', c_count union all 
    select 'c_EBKE_BLDAT_First', c_EBKE_BLDAT_First union all 
    select 'c_EKBE_BUDAT_First', c_EKBE_BUDAT_First union all 
    select 'c_EBKE_BLDAT_Last', c_EBKE_BLDAT_Last union all 
    select 'c_EKBE_BUDAT_Last', c_EKBE_BUDAT_Last 
) c (orig_col, value) 
) src 
pivot 
(
    max(value) 
    for new_col in (c_Meaning_1, c_MENGE_1, c_DMBTR_1, c_count_1, 
        c_EBKE_BLDAT_First_1, c_EKBE_BUDAT_First_1, 
        c_EBKE_BLDAT_Last_1, c_EKBE_BUDAT_Last_1) 
) piv; 

SQL Fiddle with Demo See.

Nun, da Sie Logik haben arbeiten, können Sie diese in dynamische SQL konvertieren:

DECLARE @cols AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT ',' + QUOTENAME(col + '_' + cast(VGABE as varchar(2))) 
        from preEKBE t 
        cross apply 
        ( 
         select 'c_meaning', 0 union all 
         select 'c_DMBTR', 1 union all 
         select 'c_MENGE', 2 union all 
         select 'c_COUNT', 3 union all 
         select 'c_EBKE_BLDAT_FIRST', 4 union all 
         select 'c_EKBE_BUDAT_FIRST', 5 union all 
         select 'c_EBKE_BLDAT_LAST', 6 union all 
         select 'c_EKBE_BUDAT_LAST', 7 
        ) c (col, so) 
        group by col, so, VGABE 
        order by VGABE, so 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 


set @query 
    = 'SELECT EBELN, EBELP, ' + @cols + N' 
    from 
    (
     select d.ebeln, 
     d.ebelp, 
     new_col = c.orig_col + ''_'' + cast(d.vgabe as varchar(2)), 
     c.value 
     from 
     (
     select ebeln, ebelp, 
      c_Meaning, 
      vgabe, 
      dmbtr = cast(sum(dmbtr) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
      menge = cast(sum(menge) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
      c_count = cast(sum(c_count) over(partition by ebeln, ebelp, vgabe) as varchar(50)), 
      c_EBKE_BLDAT_First = cast(c_EBKE_BLDAT_First as varchar(50)), 
      c_EKBE_BUDAT_First = cast(c_EKBE_BUDAT_First as varchar(50)), 
      c_EBKE_BLDAT_Last = cast(c_EBKE_BLDAT_Last as varchar(50)), 
      c_EKBE_BUDAT_Last = cast(c_EKBE_BUDAT_Last as varchar(50)) 
     from preEKBE 
    ) d 
     cross apply 
     (
     select ''c_meaning'', d.c_meaning union all 
     select ''c_MENGE'', d.MENGE union all 
     select ''c_DMBTR'', d.DMBTR union all 
     select ''c_COUNT'', d.c_COUNT union all 
     select ''c_EBKE_BLDAT_First'', d.c_EBKE_BLDAT_First union all 
     select ''c_EKBE_BUDAT_First'', d.c_EKBE_BUDAT_First union all 
     select ''c_EBKE_BLDAT_Last'', d.c_EBKE_BLDAT_Last union all 
     select ''c_EKBE_BUDAT_Last'', d.c_EKBE_BUDAT_Last 
    ) c (orig_col, value) 
    ) x 
    pivot 
    (
     max(value) 
     for new_col in (' + @cols + N') 
    ) p 
    order by EBELN , EBELP' 

exec sp_executesql @query; 

Siehe SQL Fiddle with Demo. Daraus ergibt sich ein Endergebnis:

|  EBELN | EBELP | C_MEANING_1 | C_DMBTR_1 | C_MENGE_1 | C_COUNT_1 | C_EBKE_BLDAT_FIRST_1 | C_EKBE_BUDAT_FIRST_1 | C_EBKE_BLDAT_LAST_1 | C_EKBE_BUDAT_LAST_1 |  C_MEANING_2 | C_DMBTR_2 | C_MENGE_2 | C_COUNT_2 | C_EBKE_BLDAT_FIRST_2 | C_EKBE_BUDAT_FIRST_2 | C_EBKE_BLDAT_LAST_2 | C_EKBE_BUDAT_LAST_2 |     C_MEANING_6 | C_DMBTR_6 | C_MENGE_6 | C_COUNT_6 | C_EBKE_BLDAT_FIRST_6 | C_EKBE_BUDAT_FIRST_6 | C_EBKE_BLDAT_LAST_6 | C_EKBE_BUDAT_LAST_6 |    C_MEANING_8 | C_DMBTR_8 | C_MENGE_8 | C_COUNT_8 | C_EBKE_BLDAT_FIRST_8 | C_EKBE_BUDAT_FIRST_8 | C_EBKE_BLDAT_LAST_8 | C_EKBE_BUDAT_LAST_8 |    C_MEANING_9 | C_DMBTR_9 | C_MENGE_9 | C_COUNT_9 | C_EBKE_BLDAT_FIRST_9 | C_EKBE_BUDAT_FIRST_9 | C_EBKE_BLDAT_LAST_9 | C_EKBE_BUDAT_LAST_9 | 
|------------|-------|--------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------|------------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------|-----------------------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------|-------------------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------|--------------------------|-----------|-----------|-----------|----------------------|----------------------|---------------------|---------------------| 
| 3000000004 |  1 | Wareneingang |  27.95 |   1 |   1 |   19.12.2000 |   19.12.2000 |   19.12.2000 |   19.12.2000 | Rechnungseingang |  27.95 |   1 |   1 |   19.12.2000 |   21.12.2000 |   19.12.2000 |   21.12.2000 |      (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) |     (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) |     (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) | 
| 3000000004 |  2 | Wareneingang |  10.95 |   1 |   1 |   19.12.2000 |   19.12.2000 |   19.12.2000 |   19.12.2000 | Rechnungseingang |  10.95 |   1 |   1 |   19.12.2000 |   21.12.2000 |   19.12.2000 |   21.12.2000 |      (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) |     (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) |     (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) | 
| 4500008499 | 10 | Wareneingang | 268.43 |   1 |   1 |   27.03.2000 |   27.03.2000 |   27.03.2000 |   27.03.2000 |   (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) |      (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) |     (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) | Leistungserfassungsblatt | 268.43 |   1 |   1 |   27.03.2000 |   27.03.2000 |   27.03.2000 |   27.03.2000 | 
| 4500010470 | 10 | Wareneingang |  0.00 |  4604 |  12 |   07.02.2001 |   07.02.2001 |   07.02.2001 |   07.02.2001 |   (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) | Warenausgabe für Umlagerung | 2117.84 |  4604 |  12 |   07.02.2001 |   07.02.2001 |   07.02.2001 |   07.02.2001 | Lieferung zu Umlagerung |  0.00 |  4604 |  12 |   01.01.1900 |   07.02.2001 |   01.01.1900 |   07.02.2001 |     (null) | (null) | (null) | (null) |    (null) |    (null) |    (null) |    (null) | 
+4

Heilige sh ** dude! Du bist so toll. Das ist es, worüber ich gesprochen habe. Ich versuchte das Denken mit dem MAX(), aber nicht SUM() jeden Datensatz vor dem MAX(). Ausgezeichnet, vielen Dank für Ihre Geduld und Zeit, meinen kryptischen Beitrag zu lesen. Ich frage mich, wie ich das Problem mit den Nullwerten in c_Meaning lösen kann. Sobald es eine Spalte mit c_Meaning_1 gibt, will ich, dass für jeden Datensatz der Wert "Wareneingang:" usw. – JollyPopper

+2

@JollyPopper Wir nennen sie das Pivot-Girl! – Kermit

+2

Es gibt keinen Markdown, um das Wort "immer" genug zu betonen. Manche Leute scheinen es einfach nicht zu verstehen. –