2014-10-02 3 views
5

я получил следующий запрос:SQL Pivot с динамическими генерируемыми столбцами, агрегатной функции и столбцы без агрегации

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 

Он генерирует мне эту таблицу

+-------+------------+-------+-----------------------------+-------+---------+----------+---------+--------------------+--------------------+-------------------+-------------------+ 
| 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  | 
+-------+------------+-------+-----------------------------+-------+---------+----------+---------+--------------------+--------------------+-------------------+-------------------+ 

Теперь у меня динамический Pivot что частично работает.

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; 

Давая мне результат:

+------------+-------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| 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  | 
+------------+-------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+-----------+ 

Мне нужен запрос, чтобы быть динамичным из-за колонны VGABE, чтобы создать новые имена столбцов и могут быть значения, которые не используются, и я только хотите использовать значения VGABE.

Теперь проблема в том, что я хочу добавить больше столбцов, которые также должны генерироваться динамически. Когда есть VGABE с номером 1, мне нужен столбец с именем c_Meaning_1 (nvarchar), и он будет иметь значение из объединения с DD07T.

c_COUNT_ означает количество каждого VGABE Значение на запись. Эта колонка отлично работает.

После этих колонн я также нужно добавить столбцы c_BLDAT_First_, c_BUDAT_First_, c_BLDAT_Last_ и c_BUDAT_Last_ со значением VGABE каскадного на конец нового имени столбца. Это значение рассчитывается в CTE.

Есть ли способ использовать CTE непосредственно без временной таблицы?

Я не уверен, как это решить, поскольку я имею дело с несколькими типами данных, и каждый из них будет агрегироваться по-разному. При наличии значение 1 и 9 для VGABE, то он должен выглядеть следующим образом:

+---------------+-----------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+---------------------------+------------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+ 
| 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   | 
+---------------+-----------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+---------------------------+------------+-----------+-----------+----------------------+----------------------+---------------------+---------------------+ 

Для каждого VGABE значения должна быть собственный столбец в порядке, указанном выше. Если вам нужна дополнительная информация, просто спросите меня, пожалуйста. Я использую SQL Server 2014 с SQL Management Studio 2014 и TSQL.

+0

Может быть, я не в полной мере понять вопрос, но если вы хотите возвращать только строки, связанные с 'VGABE = 1', то вы должны быть в состоянии добавить' WHERE' фильтр для генерации динамического столбца. Затем вы также включите другие столбцы, которые вы хотите ('c_EBKE_BLDAT_First',' c_EKBE_BUDAT_First' и т. Д.) В вашем подзапросе сводной таблицы и окончательного списка выбора, подобном этому [demo] (http://sqlfiddle.com/# ! 3/58e57/7). Если это не то, что вы хотите, тогда вам, возможно, придется обновить вопрос, чтобы он стал более понятным. – Taryn

+0

Запрос должен делать столбцы для каждого значения в VGABE. Поэтому, когда в VGABE есть значения (1,3,7, R), он должен создавать столбцы, начинающиеся с самого низкого значения _-> c_Meaning_X c_DMBTR_X c_MENGE_X c_COUNT_X c c_BLDAT_First_X c_BUDAT_First_X c_BLDAT_Last_X c_BUDAT_Last_X (где X означает значение в VGABE). Колонки должны быть в этом порядке. – JollyPopper

+0

Трудность здесь заключается в том, что содержимое c_Meaning_X зависит от значения в VGABE и находится в таблице DD07T (join). Если есть, например, VGABE 9, тогда для каждой записи необходимо создать столбец c_Meaning_9 с содержимым «Leistungserfassungsblatt» из DD07T.DDTEXT для каждой записи, есть ли только одна запись с vgabe 9, а в других нет. – JollyPopper

ответ

7

Ну, у вас здесь немного беспорядка, потому что вы хотите преобразовать несколько столбцов с несколькими строками в большее количество столбцов, и, кроме того, вам нужно будет использовать разные агрегаты для каждого, потому что некоторые из них вам нужны до SUM и других вам нужно будет использовать MAX или MIN (на строке/датах).

Вместо того, чтобы нырять прямо в динамическую версию sql, вы должны всегда попытайтесь получить правильную логику, используя меньшую версию статического запроса. Это делает работу с динамическим SQL намного проще, на мой взгляд, потому что вы не догадываетесь, что делать или что не работает правильно.

Сначала я хотел бы начать с запроса, который получит общее количество каждого элемента, необходимого для СУММЫ.

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 

См. SQL Fiddle with Demo.Это получает значения всего, что вам нужно в конечном результате, потому что вы получаете сумму по комбинации ebeln, ebelp и vgabe. Вы увидите, что я также включил все значения в один и тот же тип данных - это необходимо для следующего шага - univot. Поскольку все данные будут храниться в одном столбце, им нужны одни и те же типы данных.

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) 

См. SQL Fiddle with Demo. Теперь у вас есть данные, что выглядит следующим образом:

|  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 | 

Наконец, вы бы применить функцию PIVOT:

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.

Теперь, когда вы работаете логику, вы можете преобразовать его в динамический SQL:

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; 

См SQL Fiddle with Demo. Это дает окончательный результат:

|  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

Holy sh ** dude! Ты потрясающий. Это то, о чем я говорил. Я пробовал думать с MAX(), но не делал SUM() каждую запись перед MAX(). Отлично, большое вам спасибо за ваше терпение и время, читая мой загадочный пост. Мне интересно, как я могу решить проблему со значениями NULL в c_Meaning. Когда есть столбец с c_Meaning_1, я хочу, чтобы для каждой записи было значение «Wareningang:» и т. Д. – JollyPopper

+2

@JollyPopper Мы называем ее сводной девушкой! – Kermit

+2

Нет Markdown, чтобы подчеркнуть слово 'always' достаточно. Некоторые люди просто не понимают этого. –

Смежные вопросы