2014-10-02 20 views
5

ho ottenuto la seguente query:SQL pivot con colonne dinamiche generate, funzione di aggregazione e colonne senza aggregazione

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 

Mi genera questo tavolo

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

Ora ho un pivot dinamica che funziona parzialmente.

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; 

dandomi un risultato:

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

Ho bisogno la query per essere dinamico a causa della colonna VGABE per creare i nuovi nomi delle colonne e non ci può essere valori che non vengono utilizzati, e solo io desideri utilizzare i valori VGABE.

Ora il problema è che voglio aggiungere più colonne che dovrebbero anche essere generate dinamicamente. Quando c'è un VGABE con 1 di quanto mi serve una colonna denominata c_Meaning_1 (nvarchar) e avrà il valore dal join con DD07T.

Il numero c_COUNT_ corrisponde al conteggio di ciascun valore VGABE per record. Questa colonna funziona perfettamente.

Dopo quelle colonne Ho anche bisogno di aggiungere le colonne c_BLDAT_First_, c_BUDAT_First_, c_BLDAT_Last_, e c_BUDAT_Last_ con il valore del VGABE concatenato alla fine del nuovo nome della colonna. Questo valore è calcolato nel CTE.

C'è un modo per utilizzare il CTE direttamente senza una tabella temporanea?

Non sono sicuro di come risolvere questo problema poiché ho a che fare con più tipi di dati e ognuno di essi verrebbe aggregato in modo diverso. Quando ci sono i valori 1 e 9 per VGABE allora dovrebbe essere così:

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

Per ogni valore VGABE dovrebbe esserci una propria colonna nell'ordine indicato sopra. Se hai bisogno di ulteriori informazioni, chiedimi per favore. Sto utilizzando SQL Server 2014 con SQL Management Studio 2014 e TSQL.

+0

Forse non sono pienamente capire la domanda, ma se si vuole restituire solo righe associate con 'VGABE = 1', allora si dovrebbe essere in grado di aggiungere un' WHERE' filtra per la generazione di colonne dinamiche. Quindi includi anche le altre colonne che desideri ('c_EBKE_BLDAT_First',' c_EKBE_BUDAT_First', ecc.) Nella subquery del pivot e l'elenco di selezione finale simile a questo [demo] (http://sqlfiddle.com/# ! 3/58e57/7). Se questo non è ciò che desideri, potrebbe essere necessario aggiornare la domanda per renderla più chiara. – Taryn

+0

La query dovrebbe rendere le colonne per ogni valore in VGABE. Quindi quando ci sono i valori (1,3,7, R) in VGABE allora dovrebbe creare le colonne cominciando dal valore più basso _-> c_Messa_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 (dove X sta per il valore in VGABE). Le colonne devono essere in questo ordine. – JollyPopper

+0

La cosa complicata da fare è che il contenuto in c_Meaning_X dipende dal valore in VGABE e si trova nella tabella DD07T (join). Se c'è, ad esempio, VGABE 9, allora deve creare la colonna c_Meaning_9 con contenuto "Leistungserfassungsblatt" da DD07T.DDTEXT per ogni record, se esiste un solo record con vgabe 9 e negli altri no. – JollyPopper

risposta

7

Qui hai un po 'di confusione qui perché vuoi convertire più colonne con più righe su più colonne e per di più dovrai usare un aggregato diverso per ognuna perché alcune di esse ti servono a SUM e altri dovrete usare MAX o MIN (sulla stringa/date).

Invece di immergersi direttamente in una versione dinamica di sql, è necessario sempre provare a ottenere la logica corretta utilizzando una versione più piccola di una query statica. Ciò rende molto più semplice il lavoro con SQL dinamico, secondo me, perché non indovinerai cosa fare o cosa non funziona correttamente.

Inizialmente vorrei iniziare con una query che ottiene il totale di ogni elemento necessario per SUM.

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 

Vedere SQL Fiddle with Demo.Ciò ottiene i valori di tutto ciò di cui hai bisogno nel risultato finale perché stai ricevendo la somma sulla combinazione di ebeln, ebelp e vgabe. Vedrai che anche io scrivo tutti i valori nello stesso tipo di dati - questo è necessario per il prossimo passo - il unpivot. Poiché tutti i dati saranno archiviati nella stessa colonna, hanno bisogno degli stessi tipi di dati.

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) 

Vedere SQL Fiddle with Demo. Dati Ora hai che assomiglia a questo:

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

Infine, si sarebbero applicare la funzione 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; 

Vedi SQL Fiddle with Demo.

Ora che avete logica di funzionamento, è possibile convertire questo per SQL dinamico:

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; 

Vedi SQL Fiddle with Demo. Questo dà un risultato finale di:

|  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 ** amico! Sei così incredibile. Ecco di cosa stavo parlando. Ho provato a pensare con MAX() ma non SUM() ogni record prima di MAX(). Eccellente, grazie mille per la pazienza e il tempo di leggere il mio post criptico. Mi chiedo come posso risolvere il problema con i valori NULL in c_Meaning. Una volta che c'è una colonna con c_Meaning_1 voglio che per ogni record ci sia il valore "Wareneingang:" e così via .. – JollyPopper

+2

@JollyPopper La chiamiamo la ragazza perno! – Kermit

+2

Non c'è Markdown per enfatizzare la parola 'sempre 'abbastanza. Alcune persone semplicemente non sembrano averlo. –

Problemi correlati