Sinepp
Registered User
Hallo Leute,
folgendes Thema. Eine Datenbank hat eine Tabelle, deren Spalten unter anderem sind:
cTimeReceipt (UnixTimestamp, plus Millisekunden, also 1234567890123), cStatus (kann 10, 20, 30, 40, 50, 60 als Wert haben) und das wars auch schon wieder an wichtigen Dingen.
Ich muss folgendes leisten:
Gebe mir alle Einträge aus dem Table vom aktuellen Tag von 0-24h, benenne den Inhalt der Spalte cStatus wenn Wert = 50 auf efax_booked, ansonsten in efax_norm und summiere alle efax_booked und efax_norm auf.
Mein Script sieht zur Zeit so aus:
Die Ausgabe:
Soweit ganz nett, nur wie man sieht wird efax_norm mehrmals gezählt, da sich dahinter ja in Wirklichkeit verschiedene Statuscodes verbergen, also z.B. 10, 20, 30, 40 und 60. Wie fasse ich das nun so zusammen, dass alle "norm" summiert werden? Meine erste Idee war "noch ein Cursor muss über den ersten Loopen..." weiß aber garnicht ob so etwas geht.
Vielleicht hat einer von Euch eine elegante Idee dazu.
Vielen Dank schonmal,
Grüße
Sinepp
folgendes Thema. Eine Datenbank hat eine Tabelle, deren Spalten unter anderem sind:
cTimeReceipt (UnixTimestamp, plus Millisekunden, also 1234567890123), cStatus (kann 10, 20, 30, 40, 50, 60 als Wert haben) und das wars auch schon wieder an wichtigen Dingen.
Ich muss folgendes leisten:
Gebe mir alle Einträge aus dem Table vom aktuellen Tag von 0-24h, benenne den Inhalt der Spalte cStatus wenn Wert = 50 auf efax_booked, ansonsten in efax_norm und summiere alle efax_booked und efax_norm auf.
Mein Script sieht zur Zeit so aus:
Code:
DECLARE @startzeit char(10)
DECLARE @endzeit char(10)
DECLARE @startmonat char(2)
DECLARE @startjahr char(4)
DECLARE @starttag char(2)
DECLARE @startdatum char(19)
DECLARE @cTimeReceipt char(19)
DECLARE @cStatus char(2)
DECLARE @SystemID char(12)
DECLARE @cLineObject char(12)
DECLARE @NrOfRequests char(10)
SET @startmonat = DATEPART(month, GETDATE())
SET @startjahr = DATEPART(year, GETDATE())
SET @starttag = DATEPART(day, GETDATE())
SET @startdatum = @startjahr + '-' + @startmonat + '-' + @starttag + ' 00:00:00'
SET @startzeit = DATEDIFF([second], '1970-01-01 01:00:00', @startdatum)
SET @endzeit = @startzeit+86399
print 'Startdatum: ' + @startdatum
print 'Startzeit: ' + @startzeit
print 'Endzeit: ' + @endzeit
DECLARE result_cursor CURSOR FOR
SELECT @startdatum AS Datum, 'System02' as SystemID, cStatus, Count(cTimeReceipt) AS NrOfRequests
FROM tTodoList_FF
WHERE LEFT(cTimeReceipt, 10) > @startzeit AND LEFT(cTimeReceipt, 10) < @endzeit
GROUP BY cStatus
open result_cursor
FETCH NEXT FROM result_cursor
INTO @cTimeReceipt, @SystemID, @cStatus, @NrOfRequests
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SystemID = 'System02'
IF (@cStatus <> '50')
BEGIN
SET @cLineObject = 'efax_norm'
END
ELSE
BEGIN
SET @cLineObject = 'efax_booked'
END
print @startdatum + ' ' + @SystemID + ' ' + @cLineObject + ' ' + @NrOfRequests
FETCH NEXT FROM result_cursor
INTO @cTimeReceipt, @SystemID, @cStatus, @NrOfRequests
END
CLOSE result_cursor
DEALLOCATE result_cursor
GO
Die Ausgabe:
Code:
Startdatum: 2006-12-27 00:00:00 [SQLSTATE 01000]
Startzeit: 1167174000 [SQLSTATE 01000]
Endzeit: 1167260399 [SQLSTATE 01000]
2006-12-27 00:00:00 System02 efax_norm 9 [SQLSTATE 01000]
2006-12-27 00:00:00 System02 efax_norm 1061 [SQLSTATE 01000]
2006-12-27 00:00:00 System02 efax_norm 14 [SQLSTATE 01000]
2006-12-27 00:00:00 System02 efax_booked 696 [SQLSTATE 01000]
2006-12-27 00:00:00 System02 efax_norm 177 [SQLSTATE 01000]
2006-12-27 00:00:00 System02 efax_norm 1 [SQLSTATE 01000]
Soweit ganz nett, nur wie man sieht wird efax_norm mehrmals gezählt, da sich dahinter ja in Wirklichkeit verschiedene Statuscodes verbergen, also z.B. 10, 20, 30, 40 und 60. Wie fasse ich das nun so zusammen, dass alle "norm" summiert werden? Meine erste Idee war "noch ein Cursor muss über den ersten Loopen..." weiß aber garnicht ob so etwas geht.
Vielleicht hat einer von Euch eine elegante Idee dazu.
Vielen Dank schonmal,
Grüße
Sinepp