![]() |
Datenbank: Firebird • Version: 1.5x • Zugriff über: IBO
SELECT mit mehrfachen records - moeglich ?
Hallo zusammen,
ich bin mir nicht sicher ob man das ueberhaupt so loesen kann, aber jeder Hilfe ist willkommen, ich stehe da total auf dem Schlauch ... Fuer einen Report soll eine Query erzeugt werden um einige Etiketten zu drucken - die Anzahl der Etiketten pro Artikel richtet sich nach dem Wert im Datenbank-Feld MENGE des jewiligen Artikels. Beispiel: Artikel / Preis / Menge 4711 - 1.50 - 4 4712 - 2.20 - 8 4713 - 1.30 - 2 Fuer Produkt 4711 sollen also 4 Etiketten gedruckt werden, fuer Produkt 4712 sollen dann 8 Etiketten gedruckt werden, fuer Produkt 4713 sollen noch 2 Etiketten gedruckt werden, Die SQL-Abfrage sollte also in etwa folgende Ergebnismenge liefern: Produkt / Preis 4711 - 1.50 4711 - 1.50 4711 - 1.50 4711 - 1.50 4712 - 2.20 4712 - 2.20 4712 - 2.20 4712 - 2.20 4712 - 2.20 4712 - 2.20 4712 - 2.20 4712 - 2.20 4713 - 1.30 4713 - 1.30 d.h. irgendwie muessen die einzelnen Datensaetze MENGE-mal geclont werden - ich komm einfach nicht dahinter wie man das machen kann ... :wall: Hat jemand ne Idee wie man das in eine SELECT - Anweisung fasst ? |
Re: SELECT mit mehrfachen records - moeglich ?
Da wirst du um eine SP nicht herumkommen
|
Re: SELECT mit mehrfachen records - moeglich ?
Zitat:
SQL-Code:
for
SQL-Code:
Das dann im Delphi-Programm auswerten.
count
|
Re: SELECT mit mehrfachen records - moeglich ?
Die dann so aussehen könnte...
SQL-Code:
Edit: Hier noch ein Hack, mit dem das auch einfach mit SQL geht.
CREATE PROCEDURE MAKEOUTOUT ()
RETURNS ( Spalte1 Integer, Spalte2 Integer, Spalte3 Varchar(500), Anzahl Integer ) AS DECLARE VARIABLE i INTEGER; BEGIN FOR SELECT Spalte1, Spalte2, Spalte3, Anzahl FROM tabelle INTO Spalte1, Spalte2, Spalte3, Anzahl DO BEGIN i = 0; WHILE (i < Anzahl) DO BEGIN SUSPEND; i = i + 1; END END END Dies setzt allerdings eine Tabelle mit Zahlen voraus.
SQL-Code:
Hier wird also eine neue Tabelle benötigt, die immer alle Zahlen von 1 bis zur maximal größten Anzahl in "tabelle" enthält. Wenn du da also einfach alle Zahlen von 1 bis 1000 einmal in solch eine Tabelle einträgst, sollte das vielleicht reichen.
SELECT *
FROM tabelle, anzahlen WHERE zahl <= anzahl Oder du erstellst deine SQL-Abfrage dynamisch, dann kannst du diese Anzahl-Tabelle auch produzieren...
SQL-Code:
Dies hat den Vorteil gegenüber einer SP, dass du bei Spaltenänderungen an deiner Tabelle die neuen Informationen schneller in deinem Report zur Verfügung hast. Bei einer SP musst du da erst alle neuen Spalten durchschleppen.
SELECT *
FROM tabelle, (SELECT 1 zahl FROM tabelle UNION SELECT 2 FROM tabelle UNION SELECT 3 FROM tabelle) anzahlen WHERE zahl <= anzahl Dies würde unter MSSQL mit einer Benutzerdefinierten Funktion noch viel geschickter gehen, aber das ist eine andere Geschichte... War nur so eine Idee... |
Re: SELECT mit mehrfachen records - moeglich ?
Sttat SP könnte man auch einen EXECUTE BLOCK verwenden.
|
Re: SELECT mit mehrfachen records - moeglich ?
Zitat:
|
Re: SELECT mit mehrfachen records - moeglich ?
Zitat:
SQL-Code:
Den Wert im Dataset auslesen und im Programm x-mal drucken. Basta. :zwinker:
SELECT COUNT (BLUBB) FROM TABLEX WHERE BLA INTO :ETIKETTEN
|
Re: SELECT mit mehrfachen records - moeglich ?
Um dem Ganzen mal eine andere Denkrichtung zu geben...
Man kann Etiketten auch z.B. mit Microsoft Word erstellen. Dort ist es einfacher die Datenquelle zu manipulieren. Und da wird dann so ein Clonen benötigt. |
Re: SELECT mit mehrfachen records - moeglich ?
Zitat:
Einfach das hier mal als Query absetzen:
SQL-Code:
edit: lol, gerade erst gesehen...
execute block
returns ( Name VarChar(30), RelationID Integer, RowNum Integer ) as begin for SELECT Rdb$Relation_ID, trim(Rdb$Relation_Name) FROM Rdb$Relations WHERE Rdb$System_Flag = 1 into :RelationID, :Name do begin RowNum = 1; while(RowNum <= RelationID) do begin suspend; RowNum = RowNum + 1; end end end; Zitat:
|
Re: SELECT mit mehrfachen records - moeglich ?
Folgendes ist da trotzdem unverändert...
hier: EXECUTE BLOCK = SP Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz