SQL Variablen mit verschiedenen Datentypen verknüpfen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: SQL Variablen mit verschiedenen Datentypen verknüpfen

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von heinz_ketchup » Sa, 23.02.2008 13:55

Super Barlee!

An so etwas dachte ich. Ich werde Deinen Ansatz auf jedenfall ausprobieren.
Leider dauert das ein bischen, weil andere Aufgaben (die nicht unbedingt soviel Spaß machen) eine höhere Prio haben.
Ich werde Dich auf dem Laufenden halten.

Viele Grüße
Werner

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von Barlee » Fr, 22.02.2008 22:12

Hallo Werner,

Du könntest doch auch Deinen Ansatz mit Schleife um ein CASE WHEN erweitern, ungefähr so:

Code: Alles auswählen

WHILE monat < 13 DO
case monat 
when 1 then
INSERT INTO saldenliste ( sl_ktonr, sl_monatssaldo, sl_monat, sl_jahr)
SELECT saldenliste_original.Konto,
Saldo_1,
monat,
jahr
FROM saldenliste_original;
when 2 then
INSERT INTO saldenliste ( sl_ktonr, sl_monatssaldo, sl_monat, sl_jahr)
SELECT saldenliste_original.Konto,
Saldo_2,
monat,
jahr
FROM saldenliste_original;
when 3 then

..... usw. für Saldo_4 bis Saldo_12

else --sollte nie durchlaufen werden
INSERT INTO saldenliste ( sl_ktonr, sl_monatssaldo, sl_monat, sl_jahr)
SELECT saldenliste_original.Konto,
'0',
monat,
jahr
FROM saldenliste_original;
end case;
Vielleicht ja auch ein Weg. Führt auf jeden Fall zu dem von Dir gewünschten Ergebnis.

Schönes Wochenende!

Gruß Barlee

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von heinz_ketchup » Fr, 22.02.2008 09:43

Hallo Barlee,

danke für Deine Hilfe! Jetzt weiß ich bescheid! Ich glaube mein Ansatz mit der Schleife ist auch zu kompliziert.

Da es ja immer nur 12 Monate sind, werde ich es mal mit einer CASE-WHEN Verzweigung probieren. Wenn ich da ins stolpern komme melde ich mich wieder.

Schöne Grüße
Werner

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von Barlee » Do, 21.02.2008 22:50

Hallo Werner,

ok, dann hatte ich Dich falsch verstanden...
Da der Feldname Teil der Abfrage (des SELECTs) ist, kannst Du ihn nicht als Variableninhalt übergeben.
Insofern hast Du Recht mit Deiner Vermutung:
SQL braucht eine klare Feldbezeichnung und nichts gebasteltes.
Gruß Barlee

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von heinz_ketchup » Do, 21.02.2008 09:29

Hallo Barlee,

vielen Dank für Deine Mühe!

1. ich benutze MySQL

2. ich habe leider wieder mal mein Problem nicht ausführlich genug beschrieben. Sorry!
Dein Lösungsansatz kommt dem gewünschten Ergebnis schon sehr nahe. Toll!
Nur sollten anstatt der Feldbezeichnungen "saldenliste_original.Saldo_8" der entsprechende Wert, der sich für das Konto 4563 im August ergeben hat in meiner Tabelle stehen, z.B. 2.354,31 €.

Ich möchte meine Prozedur nutzen, um eine quere Saldenliste mit einer Kontennummer und 12 Monatswerten, in einzelne Datensätze pro Monat aufzulösen, so wie Du es in Deiner Lösung schon fast erreicht hast.
Welche Datentypen verwendest Du in den einzelnen Spalten Deiner beiden Tabellen "saldenliste" und "saldenliste_original"???
Hier die Datentypen, die in beiden Tabellen "saldenliste_original", "saldenliste" gleich sind:

Konto INTEGER # INT, damit ich später bei Abfragen mit <, >, = die richtigen Werte zurück bekomme #
Saldo_1 DECIMAL # der Kontensaldo pro Monat ist ein Euro-Wert #
Saldo_2 DECIMAL
...
Saldo_12 DECIMAL
Monat INTEGER # INT, damit ich später bei Abfragen mit <, >, = die richtigen Werte zurück bekomme #
Jahr INTEGER # INT, damit ich später bei Abfragen mit <, >, = die richtigen Werte zurück bekomme #

Viele Grüße
Werner

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von Barlee » Mo, 18.02.2008 21:51

Hallo Werner,

ich muss nochmal fragen.
Verwendest Du mySQL oder HSQL?

Mein Syntax bezog sich auf mySQL. Damit konnte ich Dein Beispiel erfolgreich nachstellen...
Bild_3.jpg
Bild_3.jpg (24.41 KiB) 1856 mal betrachtet
Welche Datentypen verwendest Du in den einzelnen Spalten Deiner beiden Tabellen "saldenliste" und "saldenliste_original"???
Was bewirkt eigentlich die (2) hinter der CHAR Definition?
CHAR(2) - über 2 wurde die Länge deklariert, die der CHAR Wert in diesem Fall aufnehmen kann, (für Monat 1 bis 12 werden maximal zwei Zeichen benötigt)

Gruß Barlee

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von heinz_ketchup » Mo, 18.02.2008 21:42

@ komma4, danke für den Versuch!

1. Prozedur-Syntax ist wie SQL-Syntax, einziger Unterschied (hoffentlich mach' ich jetzt da nichts falsch :| ) ist, dass Du bei einer Prozedur, Deine Anweisungen mit BEGINN und END "einschliessen" musst. # das ist eine stark verkürzte Anfängerdarstellung von mir ! #

2. Ich wüsste jetzt nicht, wie oder wo ich die Quotes da reinwurschteln sollte? :roll:

@ Barlee, auch danke für Deine Hilfe!
concat(saldo,cast(monat as char(2))),
funktioniert leider nicht. Es werden keine Werte aus den angesprochenen Feldern eingefügt. Ergebnis ist 0 in allen Feldern.
Was bewirkt eigentlich die (2) hinter der CHAR Definition?

Ich glaube immer noch, dass es daran liegt:
SQL braucht eine klare Feldbezeichnung und nichts gebasteltes.
Ich möchte gerne nochmal die Anregung von komma4 aufgreifen:
Warum verwendest Du nicht eine GROUP BY Klausel zum Gruppieren der Monatsergebnisse?
Leider fehlt mir die Idee, wie ich an der Stelle mit Group by weiter komme.

Also, ich bin gerne für jede Anregung zu meiner Problemlösung dankbar.

Schöne Grüße
Werner

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von Barlee » So, 17.02.2008 18:48

Hallo Werner,

mit folgendem sollte es anstelle von "saldo & monat," funktionieren:

Code: Alles auswählen

concat(saldo,cast(monat as char(2))), 
Gruß Barlee

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von komma4 » So, 17.02.2008 02:26

Sorry - ich kenne mich mit Prozedur-Syntax nicht aus...

...fehlen da vielleicht quotes zur korrekten Felderkennung, nach dem CAST() ?

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von heinz_ketchup » Sa, 16.02.2008 17:41

Hallo komma4,

vielen Dank für Deine Antwort! Nach CAST() habe ich gesucht.

Das macht genau das was ich mir vorgestellt habe. Leider funktioniert es nicht. SQL schreibt das Ergebnis aus meinem CONCAT-Befehl in die Zieltabelle, aber nicht den Inhalt des Feldes, den ich ja so übergeben wollte. Ich glaube ich bin da mit meinem Ansatz auf dem Holzweg. SQL braucht eine klare Feldbezeichnung und nichts gebasteltes.

Wie könnte ich mit GROUP BY weiter kommen? Es gibt ja nichts zusammen zu fassen. In meiner Ausgangstabelle sind es ja schon die Summenwerte pro Konto und Monat. Ich möchte lediglich in meiner Zieltabelle das Konto, den Wert des Monats, den Monat und das Jahr stehen haben.

fragt Werner

Re: SQL Variablen mit verschiedenen Datentypen verknüpfen

von komma4 » Sa, 16.02.2008 15:18

Teste, ob der Sub-SELECT alleine funktioniert.

Wenn Du eine Typumwandlung brauchst, dann nehme CAST(), zum Zusammenfügen dann CONCAT() [beides in der HSQLDB-Dokumentation]

Warum verwendest Du nicht eine GROUP BY Klausel zum Gruppieren der Monatsergebnisse?

SQL Variablen mit verschiedenen Datentypen verknüpfen

von heinz_ketchup » Sa, 16.02.2008 09:51

Hallo,

ich habe eine Prozedur, die aus einer Tabelle Datensätze auslesen soll und Teile davon in eine andere Tabelle reinschreiben soll.

In der Ausgangstabelle stehen Konten und die dazugehörigen Monatswerte:

Konto, Saldo_1, Saldo_2, Saldo_3, ... ,Saldo_12

In der Zieltabelle sollen die Datensätze so aussehen:

Konto, Saldo_1, Monat_1, Jahr
Konto, Saldo_2, Monat_2, Jahr
Konto, Saldo_3, Monat_3, Jahr

So, meine Prozedur sieht bislang so aus:

Code: Alles auswählen

BEGIN
DECLARE monat INT;
DECLARE jahr INT;
DECLARE saldo CHAR;
SET monat = 1;
SET jahr = 2007;
SET saldo = 'saldenliste_original.Saldo_ ';
WHILE monat < 13 DO
INSERT INTO saldenliste ( sl_ktonr, sl_monatssaldo, sl_monat, sl_jahr)
SELECT saldenliste_original.Konto,
saldo & monat, # ich glaube hier liegt der Fehler mit den 2 verschiedenen Datentypen CHAR & INT
monat,
jahr
FROM saldenliste_original;
SET monat = monat + 1;
END WHILE;
END
Ich lass einfach die Variable 'monat' hoch zählen und damit wird dann das Feld mit dem entsprechenden Monatssaldo ausgewählt.
Das funktioniert auch soweit, was die Struktur anbelangt. Leider bekomme ich keine Werte übergeben.

Ich glaube es liegt daran, dass ich die Variable 'saldo' CHAR mit der Variable 'monat' INT verknüpfen möchte. Wie kann ich meine Variable 'monat' als CHAR definieren und diese trozdem hoch zählen lassen?

fragt Werner

Nach oben