Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit Select zählen/rechnen und ausgeben
Andislack
07-03-2005, 02:28
Hi,
kurze Frage, geht sowas mit einem Select zu lösen?
Tabelle:
Artikelnr Menge
12345 2
5466 4
7896 3
Ausgabe mit einem Select soll sein:
12345
12345
5466
5466
5466
5466
7896
7896
7896
Temporäre Tabellen?
stored procedures?
Das ganze läuft auf einer Firebird DB und ich hab da im moment überhaupt keine Idee...vielleicht steh ich ja auch nur aufm Schlauch...dann bitte mal schubsen :rolleyes:
Danke und Gruss
Andi
Christoph
07-03-2005, 09:38
Schau mal in Deinem SQL-Buch unter den Schlagwörter "Aggregatfunktionen" und "GROUP BY" nach.
Andislack
07-03-2005, 14:31
Hi Christoph,
da Du ja scheibar weisst wie man das löst, wäre es nett, wenn Du es einfach mal aufschreiben könntest, ich bring das mit Deiner Hilfestellung nämlich nicht zusammen.
Danke Gruss Andi
Christoph
07-03-2005, 16:40
Eine Google Suche nach "SQL tutorial group by" liefert zahlreiche Treffer. Das mach ich nicht um Dich zu ärgern, sondern Dir zu helfen, selber Lösungen zu finden.
nene..., nicht group by, andi will die Gruppierung wieder "rückgangig machen"...
Das wird wohl nur prozedural gehen dh. entw. mit stored procs am sql - server oder am Client.
Hans-Georg Normann
07-03-2005, 18:09
kurze Frage, geht sowas mit einem Select zu lösen?
Kuze Antwort: Ja, mit Stored Procedures geht das definitiv.
Ich habe jetzt gerade keinen IBExpert zur Hand sonst hätte ich dir das fertige Script geliefert. Dürfte ungefähr so aussehen:
#VARIABLENDEKLARATION
# VARTNR INTERN
# VMENGE INTERN
# OARTNR AUSGABE
FOR SELECT ARTIKELNUMMER, MENGE
FORM IRGENDWO
INTO :VARTNR, :VMENGE
BEGIN
I = 0;
WHILE :I < :VMENGE BEGIN
OARTNR = :VARTNR;
I=:I+1;
END;
END;Die genaue Variablendeklaration habe ich jetzt nicht im Kopf und ansonsten hoffe ich, dass ich nicht zu viele Fehler eingebaut habe. Da es eine I/O Procedure ist, unbedingt mit SET TERM eröffnen und auch wieder abschließen.
Hans
Andislack
08-03-2005, 12:30
Hi Hans Georg,
Vielen Dank für Deinen Tipp! War goldwert, irgendwie stand ich da doch voll aufm Schlauch ;)
Musste die Procedure noch etwas "korrigieren", aber dann gings sofort:
CREATE PROCEDURE ANDI_GET_ETIKETTE (BELEGNR VARCHAR (30) CHARACTER SET WIN1252)
RETURNS (OARTNR VARCHAR (30) CHARACTER SET WIN1252)
AS
DECLARE VARIABLE VARTNR VARCHAR(30);
DECLARE VARIABLE VMENGE VARCHAR(30);
DECLARE VARIABLE I INTEGER;
BEGIN
FOR
SELECT ARTIKELNR,MENGE
FROM BELEGPOS
WHERE BELEGNR = :BELEGNR
INTO :VARTNR, :VMENGE
DO
BEGIN
I = 0;
WHILE ( I < :VMENGE )
DO
BEGIN
OARTNR = :VARTNR;
I=I+1;
SUSPEND;
END
END
END !!
"Set Term ^" braucht man ab Interbase V7 und FB1.0 nicht mehr...steht zumindest in meinem Buch... [ISBN 3827316847]
Ich benutze übrigens den ibwebadmin falls Dich das interessiert und Du den noch nicht kennst...unter Linux ist halt schlecht mit IBExpert...
@Christoph
Danke auch für Deine Hilfe. Ich hatte Dich nur darum gebeten das hinzuschreiben, weil ich mir nicht vorstellen konnte, dass Du das mit GROUP BY & Co lösen wolltest. Dass Du meine Frage nicht richtig verstanden hattest, habe ich mir schon fast gedacht :-) aber wenn Du es anders hättest lösen können, hätte ich auch gerne von Dir gelernt :)
Vielen Dank nochmal
Gruss Andi
Hans-Georg Normann
08-03-2005, 22:13
Nett, dass mein Fehlerhaftes Script dich auf den richtigen Weg gebracht hat :)
ibwebadmin sollte ich mir nochmal ansehen. Für privar sollte es reichen, ich glaube aber nicht, dass das Tool an IBExpert herankommt. Ich werd's sehen.
Hans
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.