Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Transponieren

Begonnen von dirk55555, September 09, 2013, 20:48:04

⏪ vorheriges - nächstes ⏩

dirk55555

Hallo,

ich habe das Problem das in Spalte 1 Artikelnummern stehen, zu denen es in Spalte zwei einen Bezug gibt. Zu jeder Artikelnummer kann es zwischen einem und drei Bezüge geben. Ich möchte keine Tabelle Transponieren die dann unendlich weit nach Rechts verläuft. Ich möchte einfach nur zu jeder einzelnen Artikelnummer die max. drei Bezüge auf drei Spalten verteilen.

Beispiel:

Spalte 1     Spalte 2
152             Hosen 
152             Jeans
156             Shirt
185             Pullover
152             Sale

Ich hätte gerne eine Abfrage in der ich die Daten dann wie folgend dargestellt bekommen:

Spalte 1   Spalte 2    Spalte 3   Spalte 4
152          Hosen         Jeans     Sale
156           Shirt
185          Pullover


Ich würde mich freuen wenn jemand eine Lösung für mich hätte.

Gruß
Dirk

DF6GL

Hallo,

was jetzt, willst Du Access oder Excel bemühen? Und in welcher Form  liegen die Ausgangsdaten vor?

dirk55555

Hallo,

mein Problem ist das ich aus meiner Warenwirtschaft die Daten als CSV so bekomme wie beschrieben. Um Sie in einer Onlinehandelsplattform ein zu spielen brauche ich die Daten aber in der gewünschten anderen Form. Ob das jetzt Access für mich mach oder Excel ist mir egal. Vielleicht hat jemand auch noch eine andere Lösung für dieses Problem.

Ich hatte die Hoffnung das es eine ganz einfache Lösung gibt auf die ich nur noch nicht gekommen bin. Ich könnte natürlich auch einen PHP Programmierer damit beauftragen das ganze zu lösen. Aber die Problemstellung erschien mir eigentlich nicht so schwer zu sein.

Ich gebe natürlich zu das meine Access und Excel Kenntnisse nur begrenzt sind, aber genau deswegen habe ich mir ja Hilfe in diesem Forum gesucht.

Ich hoffe immer noch das es eine einfache Lösung für die von mir beschriebene Problemstellung gibt.

Gruß
Dirk

DF6GL

#3
Hallo,

nun ja, es ist immer wichtig, den Kontext der Probleme etwas näher zu kennen, um vernünftige Lösungswege aufzuzeigen.
In Access kann ich mir hier (mit dieser Tabelle, es fehlt eine wichtige Spalte: Die laufende Nummerierung innerhalb einer Gruppe der Spalte1) nur schwerlich eine SQL-Lösung vorstellen.. Eine VBA-Lösung käme eher in Frage, weil darin ein laufender Zähler verwendet werden kann, der die Aufteilung in die 3 Spalten vornimmt.  Das Ergebnis würde aber dann in eine Tabelle geschrieben und nicht mit einer Abfrage dargestellt.

Crossposting in selben Forum ist dennoch nicht nötig....

dirk55555

Hallo,
also eine laufende Nummerierung könnte ich doch einfach manuell einfügen. Oder muss diese dann bestimmte Bedingungen erfüllen?

Ob ich die Ausgabe als Abfrage oder Tabelle habe ist für mich nich so wichtig. Ich möchte aus den umgebauten Daten einfach wieder eine CSV Datei machen die ich dann in einer Onlinehandelsplattform wie z.B. Amazon hochladen kann.

Wie schon gesagt bekomme ich die Daten aus meiner Warenwirtschaft wie beschrieben. Kann diese in der Onlinehandelsplattform aber nur in der beschriebenen Art und Weise einpflegen.

Gruß
Dirk

PS. Ich werde nicht mehr "crossposten", versprochen!

DF6GL

#5
Hallo,

eine CSV-Datei daraus herzustellen ist einfacher, als das Ganze in eine Tabelle zu schreiben...

Komme vielleicht morgen dazu, ein Beispiel zu machen.

PS: Wie ich gerade sehe, hat Harald ja schon ein ähnliches Beispiel gemacht.

dirk55555

Hallo DF6GL,

Harald hat mir zwar schon eine Lösung geliefert. Aber wenn es dir nichts ausmacht würde ich gerne noch einen weitern Lösungsansatz sehen. Natürlich nur wenn das nicht zu aufwändig ist.

Gruß
Dirk

DF6GL

Hallo,


Tabellen:

A
Felder: A1 Long, A2 Text


B
Felder B1 Long, B2 Text, B3 Text, B4 Text



Public Sub Row2Col()

Dim db As Database, rs As DAO.Recordset, rs1 As DAO.Recordset, Z As Long, S(3) As String

Set db = CurrentDb

Set rs = db.OpenRecordset("select A1 from A group by A1", dbOpenSnapshot)
If rs.RecordCount > 0 Then

  Do Until rs.EOF
   Z = 0
   S(Z) = rs(0)
   
   Set rs1 = db.OpenRecordset("select Top 3 A2 from A where A1= " & rs(0), dbOpenSnapshot)
     

     Do Until rs1.EOF
       Z = Z + 1
       S(Z) = rs1(0)
     rs1.MoveNext
     Loop
     
     db.Execute "Insert into B (B1,B2,B3,B4) Values (" & S(0) & ",'" & S(1) & "','" & S(2) & "','" & S(3) & "')"
     
     
  rs.MoveNext
  Loop

rs1.Close: Set rs1 = Nothing
End If

rs.Close: Set rs = Nothing

Set db = Nothing

End Sub