MYSQL Abfrage - Zeilen zu einer Zeile zusammenführen

kschmelzer

Benutzer
Beiträge
5
Guten Morgen zusammen,

ich bin recht neu in dem Thema und arbeite gerade an folgender MYSQL Abfrage.
Leider bekomme ich mit dem Befehl "Group by" partou nicht die Zeilen zu einer zusammengeführt (es sollen alle Werte zu einer Auftragsnummer in einer Zeile zusammengefasst werden).

Vielleicht kann mir da jemand von euch weiterhelfen?

Vielen Dank im Voraus.

Code:
SELECT
    T1.code AS Auftragsnummer,
    T1.description AS Bezeichnung,
(CASE WHEN T4.code = 'NEU' AND T5.code = 'WZG' AND (T2.code = 'N' OR T2.code = 'E') THEN T6.int_id END) AS 'N-E Neu WZG',
(CASE WHEN T4.code = 'NEU' AND T5.code = 'KAL' AND (T2.code = 'N' OR T2.code = 'E') THEN T6.int_id END) AS 'N-E Neu KAL',
(CASE WHEN T4.code = 'NEU' AND T5.code = 'TPL' AND (T2.code = 'N' OR T2.code = 'E') THEN T6.int_id END) AS 'N-E Neu TPL',
(CASE WHEN T4.code = 'VT' AND T5.code like '%WZG' AND (T2.code = 'N' OR T2.code = 'E') THEN T6.int_id END) AS 'N-E VT WZG',
(CASE WHEN T4.code = 'VT' AND T5.code like '%KAL' AND (T2.code = 'N' OR T2.code = 'E') THEN T6.int_id END) AS 'N-E VT KAL',
(CASE WHEN T4.code = 'VT' AND T5.code like '%TPL' AND (T2.code = 'N' OR T2.code = 'E') THEN T6.int_id END) AS 'N-E VT TPL',
(CASE WHEN T4.code = 'ZA' AND T5.code like '%WZG' AND (T2.code = 'N' OR T2.code = 'E') THEN T6.int_id END) AS 'N-E ZA WZG',
(CASE WHEN T4.code = 'ZA' AND T5.code like '%KAL' AND (T2.code = 'N' OR T2.code = 'E') THEN T6.int_id END) AS 'N-E ZA KAL',
(CASE WHEN T4.code = 'ZA' AND T5.code like '%TPL' AND (T2.code = 'N' OR T2.code = 'E') THEN T6.int_id END) AS 'N-E ZA TPL',
(CASE WHEN T4.code = 'VT' AND T5.code like '%WZG' AND T2.code = 'P' THEN T6.int_id END) AS 'P VT WZG',
(CASE WHEN T4.code = 'VT' AND T5.code like '%KAL' AND T2.code = 'P'  THEN T6.int_id END) AS 'P VT KAL',
(CASE WHEN T4.code = 'VT' AND T5.code like '%TPL' AND T2.code = 'P'  THEN T6.int_id END) AS 'P VT TPL',
(CASE WHEN T4.code = 'VT' AND T5.code like '%WZG' AND T2.code = 'F' THEN T6.int_id END) AS 'F VT WZG',
(CASE WHEN T4.code = 'VT' AND T5.code like '%KAL' AND T2.code = 'F'  THEN T6.int_id END) AS 'F VT KAL',
(CASE WHEN T4.code = 'VT' AND T5.code like '%TPL' AND T2.code = 'F'  THEN T6.int_id END) AS 'F VT TPL'
FROM
    job AS T1
JOIN
    index_job AS T2 ON T1.int_id=T2.job_id
JOIN
    line_job AS T3 ON T2.int_id=T3.index_job_id
JOIN
    assembly AS T4 ON T3.int_id=T4.line_job_id
JOIN
    assembly AS T5 ON T4.int_id=T5.assembly_id
JOIN
    task AS T6 ON T5.int_id=T6.assembly_id
WHERE
    T1.int_id > 0 AND
    T6.description = 'CNC-Fräsen'
 

Anhänge

  • Abfrage_Ergebnis.png
    Abfrage_Ergebnis.png
    38,7 KB · Aufrufe: 5
Werbung:
ich bin recht neu in dem Thema und arbeite gerade an folgender MYSQL Abfrage.

Du bist im falschen Unterforum. MySQL != M$SQL.

Du willst aggregieren, ich sehe aber keine Aggregatsfunktion. In PostgreSQL würde ich die Felder mit array_agg() aggregieren, das sollte das machen, was Du vermutlich machen willst, die anderen Felder dann gruppieren.

Hint: Übe das einfach mal an einer vereinfachten Ausgangstabelle, ohne die ganzen JOIN's.
 
Oh, da bin ich falsch abgebogen, kann ein Admin das Topic verschieben oder soll ich es dort nochmals öffnen?
Ich schau mal ob ich dazu was im Internet finde, leider hänge ich genau an diesem Thema welches ich lösen muss.
 
mal als schnelldemo:

Code:
edb=*# select * from kschmelzer ;
 ab_nummer | val1 | val2  | val3
-----------+------+-------+------
         1 | bla  | fasel | blub
         2 | foo  | bar   | batz
         2 | x1   | x2    | x3
         2 | y1   | y2    | y3
(4 rows)

edb=*# select ab_nummer, array_Agg(val1), array_agg(val2), array_agg(val3) from kschmelzer group by ab_nummer;
 ab_nummer |  array_agg  |  array_agg  |  array_agg   
-----------+-------------+-------------+--------------
         2 | {foo,x1,y1} | {bar,x2,y2} | {batz,x3,y3}
         1 | {bla}       | {fasel}     | {blub}
(2 rows)

edb=*# select ab_nummer, string_Agg(val1,','), array_agg(val2), array_agg(val3) from kschmelzer group by ab_nummer;
 ab_nummer | string_agg |  array_agg  |  array_agg   
-----------+------------+-------------+--------------
         2 | foo,x1,y1  | {bar,x2,y2} | {batz,x3,y3}
         1 | bla        | {fasel}     | {blub}
(2 rows)

edb=*#
 
und hier mit durchgängigem string_agg():

Code:
edb=*# select ab_nummer, string_Agg(val1,','), string_agg(val2,','), string_agg(val3,',') from kschmelzer group by ab_nummer;
 ab_nummer | string_agg | string_agg | string_agg
-----------+------------+------------+------------
         2 | foo,x1,y1  | bar,x2,y2  | batz,x3,y3
         1 | bla        | fasel      | blub
(2 rows)

ist es das, was du willst?
 
An sich müssten einfach nur die leeren Spalten ignoriert werden und die Spalten mit Wert zu einer Zeile zusammengefasst werden.

Code:
 ab_nummer | val1 | val2  | val3
-----------+------+-------+------
         1 | bla  | fasel | blub
         2 | foo  | x2   |  x3
         2 | y1   | bar    | y3
         2 | z1   | z2    | batz
(4 rows)

wobei x,y,z immer leer/null ist.

Ergebnis sollte dann sein:
------------------------------
 ab_nummer | val1 | val2  | val3
-----------+------+-------+------
         1 | bla  | fasel | blub
         2 | foo  | bar   | batz
(2 rows)
 
also so?

Code:
edb=*# select * from kschmelzer ;
 ab_nummer | val1 | val2  | val3
-----------+------+-------+------
         1 | bla  | fasel | blub
         2 | foo  |       |
         2 |      | bar   |
         2 |      |       | batz
(4 rows)

edb=*# select ab_nummer, string_Agg(val1,','), string_agg(val2,','), string_agg(val3,',') from kschmelzer group by ab_nummer order by ab_nummer;
 ab_nummer | string_agg | string_agg | string_agg
-----------+------------+------------+------------
         1 | bla        | fasel      | blub
         2 | foo        | bar        | batz
(2 rows)

edb=*#
 
Werbung:
Zurück
Oben