ich habe eine Datenbank mit Spalten in dem das Jahr und der Monat in Zahlen dargestellt sind. Das ist noch nicht das Problem, aber es gibt dann nochmals 31 Spalten und in jeder Spalte sind dann die Zeitwerte die ich zusammenrechnen muss.
Jahr----Monat-----Tag1----Tag2----Tag3----…
2010----4-----------7:30-----8:00-----7:45----…
(sorry für die Darstellung,war jetz auf die schnelle)
aus diesen Daten sollte ich ein Datum erstellen das ich nachher für Perioden-Abfragen für OLAP benötige.
Ich komm irgendwie nicht drauf, wie ich nun die Spalten, z.B. Tag1 als 1 darstelle und würde dann nur den Tag, Monat und Jahr verbinden, z.B. so: ‚Tag1‘+’.’+‚Monat‘+’.’+‚Jahr‘, dann würde aber bei mir dies rauskommen: 7:30.4.2010, aber ich möchte ja statt der 7:30 eine 1 stehen haben.
Hey Ho,…
Wieso gibt es denn 31 Spalten? Für jeden Tag eine…
Besser wäre hier:
|Tag|
|1 |
|2 |
|…|
Für jeden Tag dann extra die Uhrzeit. Somit wäre das Problem gelöst.
Dann könntest du den Inhalt nehmen. Ich verstehe hier den Sinn nicht…
Leider kann ich dir nicht weiterhelfen bezüglich Uhrzeit und Tag.
Vielleicht gibts so ne Möglichkeit den Tabellenname zu splitten und alles was nach „Tag“ kommt in ne Varibale zu schreiben und ausgeben zu lassen… Ne andere Idee hab ich leider nicht
Grüßl, Momo
ja, leider, aber den Sinn verstehe ich selber nicht.
Dies ist von einer Programmierfimrma angefertigtes Programm mit ner Access-DB und ich muss für Analyse-Zwecke nun die Daten in eine SQL-Datenbank importieren und dafür views anlegen. Das Datum selbst ist kein Problem, aber wie ich die 1 für Tag1 und 2 für Tag2 usw… am besten löste weiss ich noch nicht.
Du könntest den Umweg über eine Excel-Tabelle gehen, dort gibt es die Funktion Transponieren, die erstmal Spaltenwerte in Zeilen umsetzt. Dann hast Du Datum und Uhrzeit, wie es sich gehört.
Ganz nebenbei gesagt: Eine derartige Datenstruktur gehört dem Lieferanten vor die Füße gekippt, dazu gleich noch ein Hausverbot.
hast recht, aber ich muss gerade leider mit dem arbeiten was ich hab .
Das Problem ist, dass es noch mehr solche skurilen Tabellen gibt die ich aber auch zum verknüpfen brauche.
Die DB lass ich täglich über SSIS auf meinen SQL-Server laufen und der Cube wird täglich über Nacht aufbereitet.
Also mit transponieren ist es so eine Sache, wenn es nur 1x wäre ja, aber vielleicht ist es auch über SQL möglich, das weiß ich leider nicht.
Es handelt sich auch um über 80000 Sätze.
Trotzdem, danke für den Tip!
danke für die Hilfe!
Ja, klar, der Ansatz hilft mir schon weiter, jedoch denke ich wenn ich Case einsetze werden mir ja die Tabelleninhalte auf 01, 02… gesetzt, aber da habe ich ja die Werte drin, oder sehe ich das falsch?
SELECT date( jahr, monat,
CASE WHEN tag1 ’ ’ THEN 01
WHEN tag2 ’ ’ THEN 02
…
WHEN tag31 ’ ’ THEN 31
END AS tag )
,
CASE WHEN tag1 ’ ’ THEN tag1
WHEN tag2 ’ ’ THEN tag2
…
WHEN tag31 ’ ’ THEN tag31
END AS zeit )
FROM tabelle
eine Ausgabedatei erzeugst ?
Die hätte dann die Spalten jahr, monat, tag, zeit …
mhhh, ja, das ist nicht schlecht, aber hätte ich somite nicht für alle 31 Tage dann nochmals zusätzlich in der tmp-Tabelle 31 Spalten? Ich glaub so verstehe ich es, aber berichtige mich wenn ich falsch liege.
Also, dann hätte ich ca. 80000 Zeilen x 31 zusätzliche Spalten, oder sehe ich das falsch?
es ist noch viel schlimmer, meine erste Idee ist totaler Quatsch weil die Abfrage nur eine einzige Ergeniszeile geliefert hätte.
Hier jetzt aber mal die soeben erfolgreich getestete Idee:
SELECT jahr, monat, CASE WHEN tag01 0 THEN 1 END AS tag,
CASE WHEN tag01 0 THEN tag01 END AS tag01#
FROM tablle
UNION ALL
SELECT jahr, monat, CASE WHEN tag02 0 THEN 2 END AS tag,
CASE WHEN tag02 0 THEN tag02 END AS tag02#
FROM tablle
UNION ALL
SELECT jahr, monat, CASE WHEN tag03 0 THEN 3 END AS tag,
CASE WHEN tag03 0 THEN tag03 END AS tag03#
FROM tablle
UNION ALL
SELECT jahr, monat, CASE WHEN tag04 0 THEN 4 END AS tag,
CASE WHEN tag04 0 THEN tag04 END AS tag04#
FROM tablle
etc bis 31
Diese Abfrage liefert dir eine Tabelle mit Jahr, Monat, Tag, Feldwert , und du kannst sie wie gewohnt verarbeiten.
Ach ja, Jahr, Monat, Tag muss du noch in ein Datum konvertieren .
Gib mal Rückmeldung ob das dein Problem löst, bin gespannt.