MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 22.03.2018, 15:48   #1
winscheil
Neuer Benutzer
Neuer Benutzer
Standard T-SQL : MSSQL 2016 - SQL Abfrage mit Schleife

Hallo,

ich habe eine Tabelle mit folgendem Aufbau:
AUFTRAG, START_TAG, ENDE_TAG, PRO_WOCHE
ABC, 2018-05-07, 2018-09-07, 38699,19
DEF, 2018-03-05, 2018-04-27, 3215,15
XYZ, 2018-07-23, 2018-11-09, 11315,35

Da ist der Auftrag, ein Starttag, ein Endtag und der Geldwert, der Pro Woche zwischen Starttag und Endtag anfällt.

Jetzt will ich eine Abfrage machen, die mir pro Woche in dem Zeitraum zwischen Starttag und Endtag eine neue Zeile erstellt.
Ich überprüfe den Starttag, ob er kleiner gleich dem Endtag ist und erhöhe den Starttag immer um eine Woche und vergleiche dann wieder.
Solange der Starttag nach den Erhöhungen kleiner als der Endtag ist, wird eine neue Zeile pro Woche erstellt.


Bsp:
AUFTRAG, DATUM, PRO_WOCHE
ABC, 2018-05-07, 38699
ABC, 2018-05-14, 38699
ABC, 2018-05-21, 38699
...
ABC, 2018-09-03, 38699

Das habe ich so gemacht:
declare @zaehler int
set @zaehler = 0
while @zaehler <=(selectDATEDIFF(WEEK,START_TAG,ENDE_TAG) from QUELLTABELLE where AUFTRAG ='123')
BEGIN
insert into ZIELTABELLE
select AUFTRAG,DATEADD(WEEK,@zaehler, START_TAG) as DATUM, PRO_WOCHE from QUELLTABELLE where AUFTRAG ='123'
set @zaehler += 1
END

Das funktioniert jetzt für einen Eintrag der obigen Quelltabelle.
Aber ich weiß jetzt nicht, wie ich das auf die ganze Quelltabelle ausbaue, dass für alle Einträge/Zeilen in der Quelltabelle neue Einträge/Zeilen in die Zieltabelle geschrieben werden.

Ich hoffe, ich habe alles verständlich erklärt.
Kann mir da jemand helfen?
winscheil ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.03.2018, 16:21   #2
ebs17
MOF Guru
MOF Guru
Standard

Es ist komfortabler, den Zähler einer Zahlenhilfstabelle zu entnehmen, siehe Grundlagen - SQL ist leicht (1) - Hilfstabellen
Dort wird Jet-SQL verwendet. Die Idee dürfte aber erkennbar sein.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.03.2018, 21:13   #3
fraeser
MOF Meister
MOF Meister
Standard

Wie groß ist denn die Datenmenge und wie oft läuft die Prozedur?

Ich selber würde wahrscheinlich die sp parametrisieren und über die Frontend per Recordset eine Schleife über die Auftragsnummern laufen lassen (DISTINCT).

Du könntest aber auch über eine temporäre Tabelle eine äußere Schleife laufen lassen. Was da performanter ist, bleibt beim Versuch - da spielen ja noch etliche andere Kriterien eine Rolle.

Vielleicht hilft Dir zu letzterer Idee ja z.B. das.

https://support.microsoft.com/de-de/...l-in-sql-serve

Vielleicht geht es mit Eberhard's Vorschlag auch noch besser...!!

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.03.2018, 21:29   #4
ebs17
MOF Guru
MOF Guru
Standard

Jan, ich würde keck behaupten, dass SQL mit Tabellen sehr gut umgehen kann => natives Geschäft.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 22.03.2018, 21:38   #5
fraeser
MOF Meister
MOF Meister
Standard

Eberhard,
auf welche meiner Aussagen beziehst Du Dich?

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.03.2018, 09:28   #6
ebs17
MOF Guru
MOF Guru
Standard

Ich beziehe ich nur auf das "vielleicht".
Ergebnisse per Tabellenverknüpfung zu erzielen statt in einer Tabelle Schleifen zu laufen halte ich i.d.R. für effektiver, weil der Umgang mit Tabellen, Schlüsseln und Indizes eine der Grundfähigkeiten von SQL ist.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende

Geändert von ebs17 (23.03.2018 um 10:01 Uhr).
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.03.2018, 09:42   #7
fraeser
MOF Meister
MOF Meister
Standard

Da hast Du schon recht.
Ich wäge aber zunächst ab, welche Variante am besten ist.
Sprich Performance:Aufwand. Und natürlich, ob das einmalig ist oder wiederkehrend.

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.03.2018, 10:00   #8
ebs17
MOF Guru
MOF Guru
Standard

Bezüglich Aufwand + einmalig/wiederkehrend:
Während die Hürde, Zwischenergebnisse in temporären Tabellen abzulegen, nicht so hoch zu sein scheint, scheint es eine größere Hürde zu sein, gut geplante Hilfstabellen (mit auch solchen Zwischenergebnissen) einmalig anzulegen und dann vielfach zu nutzen. Wenn ich eine Zahlentabelle oder eine Kalendertabelle habe in einer Form, dass sie mir nützen, dann wird die Verwendung nicht auf eine einzelne Aufgabe beschränkt bleiben.

__________________

Ein freundliches Glück Auf!

Eberhard

Abfrageperformance ist kein Geheimnis
SQL ist leicht: {0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}:{8}:{9}:{10}:{11}
Dein Dankeschön: DBWiki=>Spende
ebs17 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 23.03.2018, 10:04   #9
Josef P.
MOF Guru
MOF Guru
Standard

Hallo!

Im SQL-Server verwende ich für Zahlenfolgen gerne eine Function, die mir die gewünschte Zahlenmenge als Tabelle liefert.

=> (Luftcode)
Code:

insert into ZIELTABELLE (
   ...
)
select
   AUFTRAG,
   DATEADD(WEEK, S.Seq, Q.START_TAG) as DATUM, 
   Q.PRO_WOCHE
from
   QUELLTABELLE Q
   inner join 
   dbo.fncSequence(100) S -- Zahlen von 0 bis 100 .. Max. Zahl ausreichend groß wählen, oder bei Bedarf berechnen.
   ON S.seq <= DATEDIFF(WEEK, Q.START_TAG, Q.ENDE_TAG)
Das sollte ausreichen schnell laufen.

Mit der von Eberhard angesprochenen Kalendertabelle kann sogar das Rechnen mit Datumswerten entfallen.

mfg
Josef

Geändert von Josef P. (23.03.2018 um 10:09 Uhr).
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.