SQL - Schleife mit UNION

15/10/2010 - 15:42 von Jörg Burzeja | Report spam
Hallo zusammen,

Ich möchte für einen Datenbestand nach Monaten einen Prüfung
durchführen, ob dieser in dem Monat noch nicht abgeschlossen war. Der
Datensatz soll dann einen 'Zeitstempel' als zusàtzliche Information
bekommen.

Im Prinzip liefert die Abfrage das gewünschte Ergebnis, für die letzten
3 Monate - nur leider mit 3 Ausgaben. Ich benötige dies aber als
'UNION'-Ergebnis in einer Ausgabe für die weitere Bearbeitung.

Danke für Ideen.


CREATE TABLE #Daten (id INT, von DATETIME, bis DATETIME);

INSERT INTO #Daten (id, von, bis) values (1,'20100910', NULL)
INSERT INTO #Daten (id, von, bis) values (2,'20100901', '20100910')
INSERT INTO #Daten (id, von, bis) values (3,'20100101', '20100820')
INSERT INTO #Daten (id, von, bis) values (4,'20080901', '20120401')
INSERT INTO #Daten (id, von, bis) values (5,'20090804', '20100917')
INSERT INTO #Daten (id, von, bis) values (6,'20030901', '20070518')
INSERT INTO #Daten (id, von, bis) values (7,'20101016', '20100720')
INSERT INTO #Daten (id, von, bis) values (8,'20100401', '20100716')
INSERT INTO #Daten (id, von, bis) values (8,'20100923', NULL) ;

DECLARE @Counter INTEGER
SET @Counter = 0
WHILE @Counter <= 4
BEGIN

SELECT id,
von,
bis,
CASE
WHEN datediff (mm, von, getdate ()) >= 1+@Counter
AND (datediff (mm, bis, getdate ()) <= 1+@Counter
OR bis is null
OR bis = '')
THEN SUBSTRING (CONVERT(char(19),
DATEADD(month, -1-@Counter, getdate ()), 120), 1, 7)
ELSE NULL
END AS STATUS
FROM #Daten

SET @Counter = @Counter + 1
END;

DROP TABLE #Daten;



Viele Grüsse
Jörg

++ Where Do you want to go tomorrow? ++
++ http://schneegans.de/usenet/microsoft-umzug/ ++
 

Lesen sie die antworten

#1 Helmut Woess
17/10/2010 - 08:21 | Warnen spam
Am Fri, 15 Oct 2010 15:42:59 +0200 schrieb Jörg Burzeja:

...
Im Prinzip liefert die Abfrage das gewünschte Ergebnis, für die letzten
3 Monate - nur leider mit 3 Ausgaben. Ich benötige dies aber als
'UNION'-Ergebnis in einer Ausgabe für die weitere Bearbeitung.


...

Ich würde die Ergebnisse in eine weitere temporàre Tabelle schreiben und
von dort dann mit einem select * from ... weiterarbeiten.

bye,
Helmut

Ähnliche fragen