Neuigkeiten:

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

Mobiles Hauptmenü

Felder auf einer Tabellenlinie

Begonnen von boehnli01, November 25, 2012, 15:45:01

⏪ vorheriges - nächstes ⏩

boehnli01

Hallo Zusammen - mein Access Kenntnisse sind wieder mal ausgeschöpft.

Ich habe folgende Tabelle:

Auftrag       Verpackung
---------     -------------
111111       15kgs
111111       20kgs
111111       25kgs.

Nun möchte ich aber alle Verpackungen pro Auftrag auf einer Linie und es sollte folgendermassen aussehen:

Auftrag       Verpackung1      Verpackung2      Verpackung3
--------        -------------       --------------       --------------
111111        15kgs                  20kgs                 25kgs.

Kann mir jemand helfen und erklären wie ich das bewerkstelligen muss.

Vielen Dank
Cédric

database

Hallo,

eine Möglichkeit wäre es eine Kreuztabellenabfrage dafür zu verwenden.
Untenstehendes Beispiel einer SQL dazu beinhaltet ein Feld 'PosNr', ohne das es kaum zu befriedigenden Ergebnissen kommen wird.


Auftrag       Verpackung   PosNr
---------     -------------       -------
111111       15kgs           1
111111       20kgs           2
111111       25kgs           3
222222       13kgs           1
222222       25kgs           2
222222       29kgs           3
...
..
.

Um diese Tabelle in der Form wie von dir beschrieben anzuzeigen ...


TRANSFORM First(Tabelle1.Verpackung) AS ErsterWertvonVerpackung
SELECT Tabelle1.Auftrag
FROM Tabelle1
GROUP BY Tabelle1.Auftrag
PIVOT "Verpackung" & [PosNr];



boehnli01

Danke Database - könntest du mir bitte noch erklären wie ich die PosNr innerhalb eines Auftrages erhalte.

Habe es so proberiert (SO = Auftrag):
(Select Count (*) FROM [tab_zgl_pla_info_prep] as X WHERE [X].[SO] < [tab_zgl_pla_info_prep].[SO])+1

Aber das nummiert forlaufend auf allen SO's und nicht innerhalbt der SO's.

Danke Cédric

database

Hallo,

erzeuge dir als erstes eine Temp-Tabelle (hier tblXYZ) mit folgender Syntax:


SELECT tab_zgl_pla_info_prep.ID, tab_zgl_pla_info_prep.SO, tab_zgl_pla_info_prep.Verpackung, (Select Count (*) FROM [tab_zgl_pla_info_prep] as Temp
WHERE  ([Temp].[Id] < [tab_zgl_pla_info_prep].[Id]) AND Temp.[SO] = [tab_zgl_pla_info_prep].[SO])+1 AS PosNr
INTO tabXYZ
FROM tab_zgl_pla_info_prep;


danach führst du die Tranponierung durch


TRANSFORM First(tblXYZ.Verpackung) AS ErsterWertvonVerpackung
SELECT tblXYZ.SO
FROM tblXYZ
GROUP BY tblXYZ.SO
PIVOT "Verpackung" & [PosNr];


Voraussetzung ist, dass deine Tabelle tab_zgl_pla_info_prep  ein fortlaufendes Schlüsselfeld besitzt (ID)

HTH

boehnli01

Hi database - hat gedauert, aber schlussentlich wunderbar funktioniert - ich habe nun ein Kreuztabellen Query mit POS als Column Heading. Nun möchte die Kreuztabellen Abfrage als Unterformular benutzen, aber es kommt eine error Meldung: You can't pass-through query or non-fixed-column crosstab query as a record source for a subform.

Die SQL sieht so aus:
TRANSFORM Max(tbl_zgl_pla_info_prep_pack_cross_raw.PACKSIZE) AS MaxOfPACKSIZE
SELECT tbl_zgl_pla_info_prep_pack_cross_raw.SO, tbl_zgl_pla_info_prep_pack_cross_raw.SOITEM, Max(tbl_zgl_pla_info_prep_pack_cross_raw.PACKSIZE) AS [Total Of PACKSIZE]
FROM tbl_zgl_pla_info_prep_pack_cross_raw
GROUP BY tbl_zgl_pla_info_prep_pack_cross_raw.SO, tbl_zgl_pla_info_prep_pack_cross_raw.SOITEM
PIVOT tbl_zgl_pla_info_prep_pack_cross_raw.POS ;

Kannst du mir sagen wie ich die Abfrage anpassen muss.

Danke Cédric

database

#5
Hallo,

Zitat... die Kreuztabellen Abfrage als Unterformular benutzen ...
ZitatYou can't pass-through query or non-fixed-column crosstab query as a record source for a subform

Heisst auf gut Deutsch - du kannst keine Pass-Through oder Kreuztabellen-Abfrage mit nicht Fixen Spalten als Datenherkunft für ein Unterformular einsetzen.

'Max(tbl_zgl_pla_info_prep_pack_cross_raw.PACKSIZE)' - wird wohl damit gemeint sein

Erzeuge dir aus der Abfrage eine Tabelle und nimm die als Datenherkunft

boehnli01

Vielen Dank - ich habe zu weit gesucht obwohl die Lösung naheliegend ist.