Jethro2016 0 Geschrieben 27. Juli 2014 Melden Teilen Geschrieben 27. Juli 2014 Hallo zusammen, ich bin recht neu in der Thematik und stehe schon vor mein erstes und wahrscheinlich auch nicht letztes Problem. :confused: Folgender Sachverhalt steht an: In einer Tabelle gibt es ausser der ID Spalte noch eine ConfigID Spalte und eine Value Spalte. Anhand der ConfigID werden in dieser Tabelle der Wert der Spalte Value immer aktualisiert (Update). Die Tabelle besteht aus ca. 30 Einträge, also 30 ConfigID und 30 Value Werte. Wo mein Problem liegt ist, das ich drei Value Werte aus der Tabelle brauche, die natürlich drei verschiede ConfigIDhaben und ich sie nicht untereinander haben muss sondern ich müsste die drei Werte in drei verschieden Spalten ausgegeben bekommen. :schreck: :schreck: :schreck: Beispiel: Original Tabelle: ID ConfigID Value 1 54 2340 2 56 23 3 34 128 Das Ergebnis der Abfrage sollte ungefähr so aussehen: ID Value1 Value2 Value3 1 2340 23 128 Ich hoffe ich konnte das so weit verständlich erklären. Ich schon einige Abfragen Versucht, selbst über eine Prozedur. Aber dafür reicht mein wissen noch nicht um die Abfrage korrekt um zu setzten. Vielleicht kann mir jemand von euch weiterhelfen. Danke für eure Mühe schonmal im voraus. Freudliche Grüße Jess Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 27. Juli 2014 Melden Teilen Geschrieben 27. Juli 2014 (bearbeitet) Moin, so ohne Weiteres geht das auch nicht. Um evtl. einen Lösungsansatz entwickeln zu können, müsstest du genauer beschreiben, was das Ganze soll und wie die Daten beschaffen sind. Geht es nur um exakt drei Werte? Oder sollen immer drei Zeilen der Tabelle zusammegefasst werden, über die ganze Tabelle hinweg? Wie hängen die Daten zusammen, die in einer Zeile auftauchen sollen? Wie lassen sie sich identifizieren? Ist das einmalig? Brauchst du das häufiger? Verändern sich die Werte der Tabelle? Oder bleiben sie gleich, und es kommen neue hinzu? Worin besteht die Anforderung, die Daten auf diese Weise darzustellen? Was ist das Ziel dahinter? ... Gruß, Nils bearbeitet 27. Juli 2014 von NilsK Zitieren Link zu diesem Kommentar
Jethro2016 0 Geschrieben 27. Juli 2014 Autor Melden Teilen Geschrieben 27. Juli 2014 Moin, also die Daten bestehen nur aus INT Werten. Keine VARCHAR oder ähnlichen. Die Value Werte sind einmal der Statuswert,die Temperatur und der Füllstand eines Tank. Diese Werte werden immer bei änderungen eines der Werte geschrieben (Update). Jeder für sich. Die Daten werden über eine Stored Procedure in die Tabelle geschrieben. Immer dann wenn sich die Daten ändern. Solange kein neuer Tank angeschaffen wird, wird sich die Tabelle auch nicht erweitern. ICh bräuchte die Daten in den neuen Format um den Reportbericht der jeden Tag gemacht werdne soll, den Tankstand,Temperatur und Status behinhaltet. Die ConfigID Spalte ist eindeutig. Es gibt eine Beziehung zu einer anderen Tabelle wo dadurch der Name des Tank und der aktuelle Status in Textform aufgelöst wird,anhand des Wert aus dieser Tabelle. Hm. Wenn ein Experte schon sagt das so etwas nicht so einfach geht, denke ich das ich es wohl kaum eine Lösung für das Problem gibt. Kann man nicht so eine Art "Virtuelle Tabelle" anlegen wo man alle Daten erst zusammen trägt und diese dann ausgibt oder so? Oder wie in der "nnormalen" Programmierung die Daten über ein Array sammelt? Wie gesagt, da ich noch nicht lange dabei bin, fällt es mir schwer die Daten für das gewünschte Ziel zusammen zu fassen. Gruß Jess Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 27. Juli 2014 Melden Teilen Geschrieben 27. Juli 2014 Kannst du im Report (womit machst du den Report?) nicht die benötigte Tabelle mit den 3 Spalten aufbauen und jeweils die Werte eintragen? Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 28. Juli 2014 Melden Teilen Geschrieben 28. Juli 2014 Moin, oh, eine Lösung gibt es auf jeden Fall. Ist nur die Frage wie. Und dazu benötigt man eben Informationen über die Daten. Gibt es denn in deiner Wertetabelle eine Spalte, aus der hervorgeht, wie die Werte zusammengehören? Du erwähnst ja eine Art ID für den Tank, da würde ich vermuten, dass die Wertetabelle jeweils drei Einträge mit derselben Tank-ID enthält. Denkbar wäre auch, dass bekannt ist, dass die Config-IDs 54, 56 und 34 immer zusammengehören. Oder wie ist das genau aufgebaut? Wenn man das weiß, kann man den Ansatz entwickeln. Möglicherweise würde man eine temporäre Tabelle erzeugen, wie Dukel es vorschlägt. Oder man baut eine Stored Procedure. Oder ... Gruß, Nils Zitieren Link zu diesem Kommentar
Jethro2016 0 Geschrieben 28. Juli 2014 Autor Melden Teilen Geschrieben 28. Juli 2014 Moin, Nein, es gibt in der Tabelle keine Spalte wo hervorgeht das die Werte zusammengehören. Die Tank ID ist Automatisch vortlaufend (IDENTITY(1,1)), und wir bei jeden Neuen Eintrag um Eins erhöht. Also solange keine neuer Tank hinzukommt wird auch die ID nicht herhöht. Denn die Value Werte der ConigID's werden über den UPDATE Befehl aktualisiert. Im Prinzip kann man sagen das die drei Config-ID's 54,56 und 34 immer zusammen gehören. Denn hinter diesen ConfigID stehen die Value Werte vom Fuellstand,Temperatur udn Status eines Bestimmten Tank. Original Tabelle: ID ConfigID Value 1 54 2340 => Fuellstand Tank 1 2 56 23 => Temperatur Tank 1 3 34 128 => Status des Tank 1 4 48 1234 => Fuellstand Tank 2 5 78 10 => Temperatur Tank 2 6 51 64 => Status Tank 2 So ist die Tabelle aufgebaut wie sie mir vorliegt. Wie gesagt. Die Daten werden nur über den Update Befehl aktualisiert mit dem Filter der ConfigID. Wenn jetzt noch ein Tank 3 dazukommen würde, würde die ID von 7-9 gehen. Die ConfigID wird Manuel vergeben und die Value Werte würden dann über Update und den Filter der ConfigID aktualisiert. Gruß, Jess Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 28. Juli 2014 Melden Teilen Geschrieben 28. Juli 2014 Moin, gut, dann wäre noch zu klären, was deine Verarbeitung leisten soll. Benötigst du die Zusammenfassung zu bestimmten Zeitpunkten quasi als manuellen Report? Oder soll sie fortlaufend ad hoc abfragbar sein? Eine einfache Möglichkeit für deinen Fall wäre (als Pseudocode): Erzeuge eine temporäre Tabelle mit den Spalten TankNr, Fuellstand, Temperatur, Status Schreibe in Zeile 1 den Wert 1, den Value-Wert zur ID 1, den Value zu ID 2, den Value zu ID 3 Schreibe in Zeile 2 den Wert 2, den Value-Wert zur ID 4, den Value zu ID 5, den Value zu ID 6 Gib die temporäre Tabelle aus Gruß, Nils Zitieren Link zu diesem Kommentar
Jethro2016 0 Geschrieben 28. Juli 2014 Autor Melden Teilen Geschrieben 28. Juli 2014 Moin, ja, die Abfrage soll als Report benutz werden. Dieser Report wird nur nicht Manuell angestoßen sondern wird über "Report Scheduling" automatisch ein mal am Tag (23:59 Uhr) erzeugt und an der angegebenden EMail Adresse gesendet. OK. Den Pseudocode habe ich verstanden wie die Logik ablaufen könnte. Wie setze ich das in SQl Sprache um? Muss eine Stored Prozedure erzeugt werden ? Und wie oder womit kann ich die Tabelle füllen, mit INSERT ? Kann dir erlich gesagt gerade nicht ganz folgen wo ich ansetzen muss! Muss mir nicht sofort den fertigen Code geben, das macht kein Sinn weil ich es ja lernen und verstehen möchte, aber ein kleiner Denkanstossin die richtige Richtung wie man so etwas angeht wäre sehr hilfreich. So könnte ich eventuell andere Probleme von einer anderen Seite angehen um sie zu lösen und das eventuell mit weniger hilfe. Gruß, Jess Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 28. Juli 2014 Melden Teilen Geschrieben 28. Juli 2014 In http://msdn.microsoft.com/de-de/library/ms174979.aspx findest Du ab der Hälfte die passende Syntax und Beispiele. Ab hier geht es los: SQL-Anweisungen verweisen auf die temporäre Tabelle, indem sie den in der CREATE TABLE-Anweisung angegebenen Wert für table_name verwenden. Beispiel: Zitieren Link zu diesem Kommentar
Jethro2016 0 Geschrieben 29. Juli 2014 Autor Melden Teilen Geschrieben 29. Juli 2014 Moin, Danke für eure schnelle und Unkomplizierte Hilfe bei meinen Problem. In dem Link steht ja so weit alles Gut beschrieben. Danke noch mal! Gruss Jess Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.