PDA

Vollständige Version anzeigen : SQL (vielleicht auch VBA) Problem


Tobias3
21.09.2001, 19:47
Ich habe eine Tabelle
Daten:

Produkt--KW38--KW39--Zeit--Arbeitsplatz
P1---------2---------4---------1------A1
P1---------2---------4---------1,2----A3
P2---------5---------2---------2,8----A2
P2---------5---------2---------2,5----A3


,eine Abfrage
Arbeitsaufwand:

SELECT Daten.Arbeitsplatz, Sum(Daten.KW39 * Daten.Zeit) AS KW39, Sum(Daten.KW40* Daten.Zeit) AS KW40
FROM Daten
GROUP BY Daten.Arbeitsplatz;

liefert mir folgende Ausgabe

Arbeitsplatz--KW38--KW39
A1---------------2---------4
A2---------------14--------5,6
A3---------------14,9-----9,8

Jetzt mein (für mich unlösbares) Problem:
Wie komme ich (automatisch) an eine entsprechende Ausgabe, wenn sich die Kalenderwochen in der Daten-Tabelle ändern (z.B. von KW38, KW39 auf KW39, KW40).
Dabei wäre es natürlich sinnvoll, wenn die Spaltenüberschriften der neuen Ausgabe (Abfrage) stimmen.
Die beiden Spalten in der Tabelle Daten sind vom Datum abhängig (aktuelle Woche und nächste Woche).


Tobias
*der sich heftig über Hilfe freuen würde und keine Ahnung von VBA hat*

EricB
21.09.2001, 20:19
Hallo!

Das ist ein verhunztes Tabellendesign.
Solche Daten legt man als Datensätze je Monat ab und nicht für jedes Monat ein Datenfeld in der Tabelle!

Also überdenk dein Design nochmal!

Ciao
Eric

Tobias3
21.09.2001, 21:29
Ich kann an der Tabelle Daten aber nichts weltbewegendes Drehen!

Weitere Lösungsvorschläge wären echt klasse!
Tobias

erwin
22.09.2001, 01:42
Mach eine Kreuztab.Abfrage aus den beiden Tab's - das Ergebnis sieht dann - von selbst ;) - so aus wie du's beschrieben hast. Details siehe OL-Hilfe.

so long erwin...

WalterS
22.09.2001, 08:39
Hallo Tobias!
So groß ist dein Problem nun wieder auch nicht. Wenn deine auszuwertenden Felder immer die gleiche Struktur beim Namen haben (KW und 1-2 Ziffern) dann kann man den SQL-String ja über VBA-erstellen und der Abfrage zu weisen.

Wenn du weitere Hilfe benötigst melde dich!

Tobias3
22.09.2001, 11:26
Erwin hat vollständig recht. Ich hab bei meinem zweiten Posting Müll erzählt, diese Tabelle Daten wird ja über eine Kreuztabelle automatisch NEU ERSTELLT. Mit diesen Mengen in der Tabelle Daten soll ja nämlich noch gespielt werden, um eine optimale Auslastung der Arbeitsplätze zu bekommen, daß heißt ich kann doch nur auf die Tabelle Daten zugreifen. Entschuldigt bitte mein Versehen und vergeßt das zweite Posting.
Danke auch an WalterS für seine Hilfe.


Diese Lösung wird mir wohl bei einem Teil meines Problems helfen:
Spaltenposition ansprechen (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=49261)
(Lösung 1)

Vielleich kann mir (VBA-ahnungslosen) jemand weiterhelfen wie ich beispielsweise aus dem zweiten Feld einer Tabelle1 den Feldnamen auslesen kann und damit den zweiten Feldnamen einer Tabelle2 überschreiben kann. Dann wäre mein Problem gelöst.
(Lösung 2)


Ich würde dann mit Lösung 1 aus der Tabelle Daten:
Produkt--KW38--KW39--Zeit--Arbeitsplatz
eine Tabelle Daten2 erstellen:
Produkt--KW_A--KW_B--Zeit--Arbeitsplatz

und aus dieser dann die Tabelle Arbeitsaufwand1:
Arbeitsplatz--KW_A--KW_B

Mit Lösung 2 würde ich dann auf Tabelle Arbeitsaufwand kommen:
Arbeitsplatz--KW38--KW39


Für sachdienlich Hinweise für Lösung 2 sehr dankbar
Tobias

PS: ich hab die Tabellengestalltung natürlich hier sehr vereinfacht dargestellt, die Tabelle Daten sieht "zum Spielen" anders aus, aber dies tut nichts zur Sache

erwin
22.09.2001, 14:22
@tobias

jetzt bin ich aber wieder beruhigt ;) irgendwie kam mir dein Posting etwas "konfus" vor (sprichst von e. Tab. die aussieht wie eine Pivot-Query, und fragst hinterher wie du das zuerst dargestellte "Resultat" erreichst)

So ganz ist mir auch nicht klar woraus du jetzt abzielst - also rate ich mal: du willst das ganze in e. (fixen) Formular darstellen, was natürlich nicht klappt, da sich ja die Feldnamen ändern.

So könnte das klappen...

1.) Einlesen von CurrentDb.TableDefs("Daten").Fields(i=0..n-1).Name
2.) Einstellen der .Caption und Feldeigenschaften im Formular beim Öffnen (ggf. überzählige Controls unsichtbar setzen)

HTH erwin...

Tobias3
22.09.2001, 16:44
Ein Formular zum Anzeigen der Tabelle Daten brauche ich nicht.
Ich muß die Tabelle Daten aber weiterverarbeiten (wie in meinen ersten Beitrag geschrieben), dies geht aber nicht mit den Feldnamen sondern wohl nur mit den Feldpositionen . Eine Lösung hierfür liefert Scorefun im oben schon angegebenen Beitrag (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=49261).
Da das Ergebnis in Form der Abfrage Arbeitsaufwand aber wieder die richtigen Feldnamen haben soll bräuchte ich noch
eine Lösung, die mir den Feldnamen der zweiten Spalte einer Tabelle1 ausließt und damit den Feldnamen der zweiten Spalte einer Tabelle2 überschreibt

Vielen Dank, das hier Euch Gedanken über mein Problem macht
Tobias

erwin
23.09.2001, 11:20
wie das geht steht aber eigentlich schon i.d. vorigen Antwort also zB:

currentdb.TableDefs("tab1").Fields(1).Name = _
currentdb.TableDefs("tab2").Fields(1).Name


so long erwin....

PS: Achtung - Fields fängt bei 0 an zu zählen !

Tobias3
23.09.2001, 12:01
Die ist ja superkurz, die Lösung.
Danke
Tobias