Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hallo Zusammen,
ich brauche mal wieder eure Hilfe, und zwar habe ich eine Tabelle, welche wie folgend aussieht:
Index | Farbe | HausNr | Material |
2001 | rot | - | - |
2001 | - | 25 | - |
2001 | - | - | holz |
2005 | blau | - | - |
2005 | - | 185 | - |
2005 | - | - | stein |
Und ich möchte die Zeilen zusammen fassen also alle drei Infos zu dem Index 2001 in einer Zeile und die Infos zur 2005 in der nächsten Spalte, damit es dann wie folgend aussieht:
Index | Farbe | HausNr | Material |
2001 | rot | 25 | holz |
2005 | blau | 185 | stein |
Ich habe es versucht mit Group by, aber dazu weiß ich dann nicht wie ich die 3 Felder aggregieren soll, da es ja Textfelder sind und keine Zahlen welchen Summiert werden können oder so.
Es muss doch sicher eine Lösung geben oder wer Tipps dazu weis und mir somit helfen kann, ich bitte euch drum.
Grüße
Merry
#Load, #group by, #Tabelle, #aggregieren
Es gibt Alternativen. Hier ist eine andere Lösung
Source:
LOAD * INLINE[
Index Farbe HausNr Material
2001 rot
2001 25
2001 holz
2005 blau
2005 185
2005 stei
] (delimiter is ' ')
;
Source_new:
NoConcatenate
LOAD Index
, SubField(TMP,',',1) as Farbe
, SubField(TMP,',',2) as HausNr
, SubField(TMP,',',3) as Material
;
LOAD distinct Index
, concat(Farbe&HausNr&Material,',') as TMP
Resident Source
Group By Index
;
drop table Source;
Ok ich glaub es liegt dran, das meine Daten nicht immer für jede Gruppe einen Wert je Sparte hat, somit könnte der Ansatz denk doch passen.
Ich für meinen Fall werde es etwas abwandeln, bzw. etwa so machen:
Source_New:
Load Index, GRP_Farbe, GRP_Haus, GRP_Material ;
Load Index,
concat(Farbe,';') as GRP_Farbe,
concat(HausNr,';') as GRP_Haus,
concat(Material,';') as GRP_Material
resident Source
Group by Index;
Hello @merry2018 ,
Use this script to get the result you want.
Source:
LOAD * INLINE[
Index Farbe HausNr Material
2001 rot
2001 25
2001 holz
2005 blau
2005 185
2005 stei
] (delimiter is ' ');
LET NoFields = NoOfFields('Source');
For i=2 to $(NoFields)
LET FieldName = FieldName($(i),'Source');
TMP:
LOAD Index
, '$(FieldName)' as TMP_COLUMN1
, $(FieldName) as TMP_VALUE
Resident Source
Where len($(FieldName))>0;
next i
;
drop table Source;
TMP2:
Generic LOAD * Resident TMP;
drop fields TMP_COLUMN1
, TMP_VALUE
;
OUTPUT:
NoConcatenate LOAD distinct Index Resident TMP;
drop table TMP;
FOR i = NoOfTables()-1 to 0 STEP -1
LET vTable=TableName($(i));
IF WildMatch('$(vTable)', 'TMP2.*') THEN
LEFT JOIN (OUTPUT) LOAD * RESIDENT [$(vTable)];
DROP TABLE [$(vTable)];
ENDIF
NEXT i
;
@eddie_wagt vielen Dank für deine schnelle Antwort.
Ist es indem Fall nicht möglich dies nur mit einem neuen Laden der Tabelle (Resident) zu lösen und einer if Bedingung und Group oder so, ohne diese Schleifen usw. ?
Es gibt Alternativen. Hier ist eine andere Lösung
Source:
LOAD * INLINE[
Index Farbe HausNr Material
2001 rot
2001 25
2001 holz
2005 blau
2005 185
2005 stei
] (delimiter is ' ')
;
Source_new:
NoConcatenate
LOAD Index
, SubField(TMP,',',1) as Farbe
, SubField(TMP,',',2) as HausNr
, SubField(TMP,',',3) as Material
;
LOAD distinct Index
, concat(Farbe&HausNr&Material,',') as TMP
Resident Source
Group By Index
;
drop table Source;
Diese Variante hat mir eigentlich gut gefallen und habe ich auch so eingebaut, aber leider baut es die einzelnen Informationen teilweise nicht richtig zusammen oder nimmt es in eine andere Spalte.
Indem Fall scheint es doch nicht so einfach zu gehen, oder es gibt noch eine andere Variante, wo es geht mit Group und einer anderen Möglichkeit oder so.
Trotzdem Danke und mal sehen ob es noch eine richtig arbeitende Möglichkeit gibt es zu lösen, ich bin gespannt.
Ok ich glaub es liegt dran, das meine Daten nicht immer für jede Gruppe einen Wert je Sparte hat, somit könnte der Ansatz denk doch passen.
Ich für meinen Fall werde es etwas abwandeln, bzw. etwa so machen:
Source_New:
Load Index, GRP_Farbe, GRP_Haus, GRP_Material ;
Load Index,
concat(Farbe,';') as GRP_Farbe,
concat(HausNr,';') as GRP_Haus,
concat(Material,';') as GRP_Material
resident Source
Group by Index;
Hello @merry2018 , Ich bin froh, dass Sie davon inspiriert waren und dass es jetzt funktioniert.